Этого треда уже нет.
Это копия, сохраненная 1 сентября в 04:11.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
image4,4 Мб, 1550x2150
Rust #32 /rust/ 3125439 В конец треда | Веб
Добро пожаловать в тред гарантий, обещаний, владения, заимствования и тайных знаков

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)
2 3125574
>>25439 (OP)
В /пр/ бамплимит 1000, ты запомни на будущее. Сам на этом обжигался.
3 3125648
>>25574
Угу, а что предыдущий тонет тогда?
4 3125652
>>25574
Бамплимит давно стал 500.
5 3125656
>>25652
Пусть тонет, раст не нужен и опасен.
6 3125658
>>25656
Ты не нужен, гнида. Как бы тебя забанить по подсети.
7 3125659
>>25656
Посмотрим мы на твоё ебало, когда завершим переписывание линукса на раст.
8 3125681
>>25658
Но раст правда опасен.

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

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

>>25659
Никогда. В ядре ничего не написано на расте и не будет написано никогда, даже драйвера.
9 3125690
>>25681
Причём тут трансы? Пойди подрочи уже, шизик.
10 3125702
>>25690
В смысле причем трансы? 70% людей кто работает над коре либой раста - трансы. У них там круговая ебля, они всех гетересексуалов двинули из разрабтки ядра. В компиляторе та же проблема, кста.
11 3125720
>>25681

>Никогда. В ядре ничего не написано на расте и не будет написано никогда, даже драйвера.


Так уже написано
https://github.com/search?q=repo%3Atorvalds%2Flinux path%3A*.rs&type=code
Драйвер пока только один, но лиха беда начало, как говорится:
https://github.com/torvalds/linux/blob/master/drivers/net/phy/ax88796b_rust.rs
12 3125733
>>25720
В ядре этого нет, всё в порядке.

>>25728 (Del)
Нет, я не пишу на расте.
13 3125833
есть ли библиотека на раст эксельки шлепать и графики рисовать?
14 3125851
>>25833

> эксельки шлепать


https://github.com/pola-rs/polars

> графики рисовать


https://github.com/plotters-rs/plotters
15 3126032
Анончики, подскажите пожалуйста. Вот был у меня код как на пикриле 1 и всё было хорошо, но захотелось переделать и сделал как на пикриле 2. Теперь раст говорит "cannot return value referencing temporary value" (пиркилы 3, 4). Я понимаю в чём проблема кода на пикриле 4, но ведь я в пикриле 2 возвращаю ссылку не на что-то что было создано внутри метода, а на часть структуры которая продолжит существовать и после того как метод вернёт значение? Я думал что может быть проблема в том что после того как метод вернёт ссылку кто-то сможет мутировать структуру, вызвав переаллокацию содержимого HashMap и таким образом возвращённая ссылка будет инвалидирована, но ведь борроу чекер не должен позволить мутировать структуру пока существует живая ссылка на её часть...

Я смотрю что ".read().await" возвращает " RwLockReadGuard<'{error}, HashMap<String, Room>>" и, видать, возвращаемая ссылка привязывается не к HashMap которая в структуре лежит, а привязвается к "RwLockReadGuard" и инввалидируется когда этот самый гуард дропается в конце метода. Но это получается что я могу использовать ссылку только пока живой гуард? А как тогда разбить код на два метода как у меня на пикриле 2?
16 3126043
>>25733

>В ядре этого нет, всё в порядке.


В смысле нет? Вот же я прямо файл скинул.
17 3126049
>>25733
Так и будешь в грязных ходить получается?
18 3126097
>>26032
Суть read() в RwLock в том, чтобы заблокировать вызывающий тред, до тех пор пока все писатели не закончат свою работу. После этого уже сколько угодно читателей могут работать с получившимся значением, пока RwLockReadGuard существует. Ты не можешь передать ссылку на его содержимое куда-то ещё, иначе как RwLock сможет выполнять свои гарантии? Т.е. представь что это было бы возможно, ты передал ссылку на внутреннее содержимое, RwLockReadGuard был дропнут и тут в другом треде вызывается write(). Во write() будет проверка, что никаких других читателей и писателей активных нет, поэтому он со смелой душой начнёт менять внутреннее значение. А в первом потоке у тебя ссылка, кровь, кишки, распидарасило.

Хз как лучше тебе сделать, у меня нет должного опыта. Попробуй Room ещё в один Arc обернуть что-ли, лол, и возвращать клон Arc'a.
19 3126239
>>25702
А в других языках трансов нет? Опомнись. 2024 год на дворе, трансы захватели все айти-сообщества.

> Доёбываешься к расту из-за трансов


> В твоём любимом языке корлибу тоже пишут анальники, а натуралы сидят тихо, не отсвечивают, чтоб не заканселили.

20 3126284
>>25439 (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!, можно использовать клонирование строки
21 3126322
>>26284
Это макрос, который использует built-in'ы компилятора, им насрать на правила языка. Считай, что в нём происходит неявная передача по ссылке, т.е. заимствование.
22 3126348
>>26322
понял
ответ в макросах, буду читать дальше - пойму
спасибо!

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

>двойную запись


>запись + чтение


можно подробнее? не очень понял

>>26368
так вот что дает эта мув-семантика? Я так понимаю, что мув-семантика необходима для поддержания работы владения (2-ое правило гласит, что данными может владеть только одно значение, не больше). А какие преимущества дает владение перед деструкторами? Для себя выделил только предотвращение от ошибки двойного освобождения
26 3126398
>>25720

>Драйвер пока только один


Это буквально 1в1 на С, но почему то сишная версия выглядит проще и понятнее.
27 3126419
>>26377

>А какие преимущества дает владение перед деструкторами?


А какое преимущество у тёплой одеждой перед оранжевой? Это некорректный вопрос. Деструкторы есть в расте, просто необходимо реализовать трейт Drop для своего типа. К схеме владения они не имеют отношения.
28 3126436
>>26419
Оке, понял ошибку
Тогда так: зачем была введена концепция владения? Какую проблему она решает?
29 3126439
>>26436

>Какую проблему она решает?


Корректности програм.
30 3126462
>>26436

>Тогда так: зачем была введена концепция владения? Какую проблему она решает?


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

В целом >>26439 правильно сказал, но не упомянул одну важную деталь. Это способ проверить на этапе компиляции, что программа корректная. Возможно не единственный, возможно не самый оптимальный или удобный, но оно работает.
31 3126491
>>26043
В ядре-то нет.
32 3126505
>>26462
А чё там решается, в итоге, корректность время жизни и всё? Выходы за границы это чисто рантайм проверочки в стандартных типах типо слайсов?
33 3126540
>>26505
Это вопрос в контексте владения или в целом? Видимо в целом, потому что выходы за границы явно не имеют отношения к владению. Хз, мне кажется вторая мощная вещь в расте — это система типов и сопоставление образцов (pattern matching), которые полностью контролируются компиляторм. Ну и в целом отслеживаются какие-то вещи, которые обычно служат источником уязвимостей. Например, был вопрос про println!, в отличие от сишного printf, в нём невозможно организовать атаку некорректной форматной строкой, потому что а) форматная строка обязана быть строковым литералом б) проверка аргументов будет на этапе компиляции.
34 3126544
>>26540
Конкретно про владение, с помощью этого же решается только задача об определении времени жизни объектов?
35 3126559
>>26544
Ну да. Тебе как программисту не нужно контролировать время жизни руками либо полагаться на рантайм. Если получилось скомпилировать программу, то оно как-то само всё делается, причём максимально эффективным способом.
36 3126702
>>26436

> зачем была введена концепция владения? Какую проблему она решает?


Zero cost garbage collector.
Ящитаю.
37 3126971
>>26702
Это уровень смарт поинтеров в с++, и они почему-то не считаются зеро кост
38 3126980
>>26971
Наверное это потому, что они работают в рантайме, не думал? Впрочем, в расте этого добра тоже навалом да ещё и в нескольких вариациях.
39 3126986
>>26980
У вас раст в компайл-тайме освобождает память даже не аллоцировав?
40 3126987
>>26980
На куче не может быть zero cost памяти. И в расте всё тоже в рантайме работает. Разница со смарт поитерами только в наличии боров чекера - в крестах ты можешь взять ссылку на смарт-поинтер и проебать объект, по производительности разницы никакой нет.
41 3126991
>>26436
В первую очередь проблему несинхронизированного доступа к объекту из двух мест.
42 3126992
>>26986
>>26987
Речь о том, что концепция владения относится не только к умным указателям.

Соре, но пожалуй я больше в этой специальной олимпиаде участвовать не буду. В прошлый раз мне доказывали, что владение и мув это одно и то же. В этот раз, что владение и умные указатели это одно и тоже. Сами вбрасываете, сами и доказывайте.
43 3126995
>>26991
тут уже про многопоточку?
44 3126996
>>26462

>но это означает пересказ всего растбука


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

Читаю растбук и там как бы вся книга - последствия введения концепции владения, а не профиты
45 3126997
>>26980

>в расте этого добра тоже


о каком добре ты говоришь, анон?
46 3127062
unwrap unwrap unsafe unsafe unwrap unwrap unsafe unsafe
image411 Кб, 1403x1428
47 3127194
>>26995
Нет, классический пример с итерацией по контейнеру анон уже приводил >>26367. Есть два места, где мы обращаемся к вектору как к структуре данных — проверка что итератор достиг конца вектора в конце шага цикла и изменение размера контейнера в теле цикла. Получается один читатель и один писатель существуют одновременно. К чему это приводит, сам видишь.

https://ideone.com/zUXA5R
48 3127209
>>26997
Про умные указатели. В плюсах это unique_ptr и shared_ptr + weak_ptr. Прямые аналоги в расте это Box и Rc. Почему-то чел выше считает, что они заменяют концепцию владения, я хз почему.
49 3127227
>>26996
Концепцию владения нужно рассматривать вместе с другими основными механизмами управления памятью в расте — заимствования и времени жизни, потому что без них программы писать можно конечно, но грустно и не очень эффективно для языка, предназначенного для системного программирования в том числе.
В целом, этим решаются базовые проблемы управления памятью, которые опять же >>26367 обозначил:
- нулевые или висящие ссылки
- двойное удаление
- пропущенное удаление
- гонки

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

Это как бы прямые результаты. Но косвенно действительно очень много последствий. Чтобы далеко не ходить за примером посмотри на >>26032. Я пытался объяснить поведение компилятора в >>26097. Вкратце, компилятор не дал некорректно воспользоваться структурой данных и сделал это благодаря владению и заимствованию.
50 3127317
>>27194

> К чему это приводит


К неумению писать код?
1707836554805.png88 Кб, 719x1287
51 3127323
>>27194
Откуда вот такие дебилы лезут? Какой код написал, так он и работает.
>>27227

> Тебе похоже непонятно что такое гонка


Это ты не знаешь базовых понятий. Какая нахуй гонка в однопоточном выполнении.
52 3127328
>>27227

>проблемы управления памятью


>гонки


ох бой
53 3127332
>>27323

>пикрил


Всегда проигрываю с этих выкрутасов с классиками, нахуя было создавать такой язык? Чтобы не скушно было что ли лол?

Мимо-сишный-байтослесарь
54 3127391
>>27209

> Почему-то чел выше считает


> я хз почему


Это латентный педик, который ИТТ "гоняет трансов". Вместо того, чтобы признаться себе в том, что ему нравятся хуйцы. В связи с таким сложным подавлением своих желаний, дурачок объявил войну "пидоrustу" и срёт здесь по КД уже который тред.

Ситуация в общем-то энциклопедичная.
55 3127395
>>27317

>К неумению писать код?


>>27323

>Откуда вот такие дебилы лезут? Какой код написал, так он и работает.


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

>>27323

>Это ты не знаешь базовых понятий. Какая нахуй гонка в однопоточном выполнении.


>>27328
Что шаблон порвался? Ну назовите это как-то по другому или дополните пример многопоточностью, где ваша фантазия? Писал так, чтобы было понятнее о чём речь. Я если честно принципиальной разницы не вижу. В одном потоке можно даже сдуру дедлок сделать. Суть проблемы не меняется от количества потоков, только сложность отладки.
56 3127403
>>27395

>не нужно думать обо всех подводных камнях


В пидорасте тоже полно неявной хуиты как в плюсах, смысл одно говно заметь другим аналогичным говном?

>Ну назовите это как-то по другому


Давай мы тебя не будет мужиком называть, а по-другому.

>Я если честно принципиальной разницы не вижу


Дак ясно всё с тобой, даунёнок.
57 3127415
>>27403

>полно неявной хуиты как в плюсах


Вся хуита в расте вылазит на этапе конпеляции, в отличие от.
58 3127425
>>27415
Анус ставишь?
59 3127458
>>27425
Твоей мамки а она и не против
60 3127462
>>27403

>Дак ясно всё с тобой, даунёнок.


Даунёнка ты в зеркале видишь, дегенерат. Пока ты только в лужу пердишь, бросаясь голословными утверждениями.
61 3127494
>>27458

>-Вся хуита в расте вылазит на этапе конпеляции, в отличие от.


>-Анус ставишь?


>-РЯЯЯЯ УИИИ


Безопасен снаружи и опасен внутри лол
А я знаю, что ты пидар63 Кб, 553x766
62 3127518
>>27403

> пидораст


> мы тебя не будет мужиком называть


>>27425

> Анус ставишь?


> Анус


> Анус


>>27403

> пидораст

63 3127545
>>27395

> Я лично люблю когда машина делает за меня рутинную работу.


Питонист, ты точно в нужный тред зашёл?
64 3127598
>>27227

>Тебе похоже непонятно что такое гонка


это Data races из растбука?
65 3127604
>>27227
И да, спасибо за объяснение, анон!
66 3127607
>>27395

>В одном потоке можно даже сдуру дедлок сделать


А это как? Можно пример? Правда интересно
image625 Кб, 1440x1538
67 3127618
>>27598
Ну я имел в виду именно это, да.
https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html

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

Или ты подписался на какой-то коллбек и забыл отписаться вовремя. А потом этот коллбек триггерится и расхуяривает тебе всю кучу. Код полностью однопоточный и синхронный, но искать ты это будет весь день.
71 3127688
>>27618

> потоки


> абстракция над CPU


Угомоните уже этого дегенерата. С каждым разом всё кринжовее и кринжовее выдаёт перлы.
72 3127696
>>27646
>>27652
Слушай, ну если удобнее думать про многопоточность в этом контексте, то так и делай, ничего плохого в этом нет на самом деле. Я сам именно так себе это и представлял, когда читал растбук. Просто когда начинаешь самостоятельно что-то пробовать писать, то приходит осознание, что это относится не только для многопоточности.

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

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

Я хоть и назвал тут всё терминами связанными с многопоточностью для облегчения понимания, но по сути тут в одном нативном потоке обрабатывается две очереди сообщений. При этом сообщения управляют блокировкой некоторых ресурсов. Только не спрашивай меня, зачем в одном нативном потоке обрабатывать две очереди, я с таким в жизни никогда не сталкивался, поэтому и написал "сдуру". Ну можно представить, что какие-то команды поступают с двух разных сокетов, данные с которых поток ожидает через select() если есть его аналог в расте. Наверное это больше на жизнь похоже.
73 3127705
>>27688
Что, шаблон продолжает рваться и трещать, дебилушка? Я так-то под эмбед пишу на сях, работал с embOS, сейчас проект на FreeRTOS. Так вот, там нет ни потоков, ни процессов, сюрприз. Вместо них таски. Но почему-то есть параллелизм со всеми своими проблемами. На одноядерном процессоре, кстати.
74 3127715
Эксплуатировать рейскондишн едва ли не проще чем переполнение буффера, кстати.
75 3127723
>>27705
Что ты там абстрагируешь на ЦП, клован. Аппаратные ядра ЦП не имеют вообще никакого отношения к системным потокам.
76 3127742
>>27723

> Аппаратные ядра ЦП не имеют вообще никакого отношения к системным потокам.


Ну хоть в чём-то ты со мной согласен.
77 3128012
>>27672

>коллбек триггерится


выполняется в отдельном потоке? Обычно же берется поток из пула. Ну то есть для работы в юзерспейсе обязательно нужен поток
78 3128027
>>27705
кстати, вроде есть возможность на расте писать под эмбед. Или нет?
79 3128030
>>28012

>выполняется в отдельном потоке?



Необязательно. Это может быть ивент луп за двумя слоями абстракций.
80 3128036
>>28030
так операционка предоставляет выполнение только в потоке
да и ивент луп оперирует пулом потоков
81 3128225
>>28027
Да есть конечно. Вот классное видео, если интересно по быстрому глянуть, в котором объясняется как поморгать диодом на голом железе: https://www.youtube.com/watch?v=jZT8APrzvc4
Есть куча проектов всяких RTOS, чтобы не писать всё в одном unsafe: https://arewertosyet.com Мне ещё попадались какие-то коммерческие разработки.
Вообще был в своё время интересный стэнфордский курс CS140e, в котором авторы обучали расту на примере разработки своей ОС: https://cs140e.sergio.bz Видео, кстати похоже писал чувак, проходивший этот курс.
82 3128599
>>28225
я в мк не очень разбираюсь, но хочу поучить раст, в том числе в будущем и для этого. А ты разбираешься в мк, можно задать пару вопросов?
83 3128693
>>27672

>И не подождав на ивенте решил эту строку затереть. А в это время контроллер твоего SSD читает твою память и записывает какой-то мусор.


Это не так работает, упрощённо:
1) ты заполнил буфер в ядре своим юзерспейсовым говном, тебе вернули управление
2) ты (твой планировщик) опять сделал системный вызов со своим юзерспейсовым говном, тебе вернули ошибку EAGAIN, потому что буфер в ядре ещё занят предыдущим твоим говном
3) планировщик в ядре вызвал старт драйвера ссд и тот стартовал дма передачу
4) ..
5) тебе вернули управление ..
6) контроллер ссд дёрнул прерывание/дма часть выставила флаг о завершении передачи -> ядро перемещает указатель в буфере (высвобождает часть), на следующем системном вызове твоё говно скопируется в освобождённую часть и процесс повторится
Это всё если ты не используешь какой-нибудь метод эвентов по типу селектов/полл/еполл, в случае с последними всё ещё проще, какая тут может быть гонка?
84 3128756
>>28693
Во-первых, это никак не следует из доков. Кто мешает запинить память и сразу DMA-шить в буфер юзера? Во-вторых, пусть ты сделал два асинхронных вызова в один и тот же буфер и потом позвал WaitForMultipleObjects, и оба ивента завершились одновременно. 1. Что будет в буфере? 2. Куда скопируется результат, если буфер уже дропнут или переаллоцирован?
85 3128761
>>28756

>ассинхронный вызов


У тебя один поток/процесс, ассинхронность через неблокирующее ио.
86 3128768
>>28761
Да, и? Я сделал два неблокирующих чтения в один буфер и стал ждать на ивентах. Получаем гонку в формально однопоточной приложухе. Бинго? То же самое можно получить в какой-нибудь куде.
87 3129010
>>25439 (OP)
аноны, остановился в изучении на теме "модули" и возник вопрос: а есть ли в природе пример, где модуль приватный? То есть, если есть код в приватном дочернем модуле - он сам не вызовется, значит его надо вызывать из родительского модуля. Но чтобы его вызвать из родительского - надо этот дочерний сделать публичным. Итого: все модули должны быть публичными?
88 3129016
>>29010

> а есть ли в природе пример, где модуль приватный?


Да, есть пример в астрофизике: чёрная дыра, собсна. Полностью приватна от всей остальной Вселенной. А смысл?
89 3129019
>>29016
так в том-то и вопрос: а зачем делать модули по умолчанию приватными? Зачем вообще вводить для модулей концепцию приватности/открытости? Чтоб перед каждым модулем писать pub?
90 3129021
>>29019
В растбуке это поясняется. Я уже не помню, а открывать лень. Давай ты сам откроешь.
91 3129132
>>29019
Для того чтобы твои юзеры не могли сломать логику твоего крейта, вызывая не те функции не в том порядке.
92 3129136
>>29010
pub(crate)
93 3129138
Есть ли смысл начинать изучать раст, если не планируешь долбиться в жепу?
94 3129143
>>29138
В свете современных реалий долбиться в жёпу или нет далеко не всегда зависит от твоих планов. Так что, однозначно учить.
95 3129193
>>28599
А я не очень разбираюсь в программировании на расте под MCU. Вопросы задавать тебе никто не может запретить.
96 3129234
>>29021
как бы и читаю - вот
>>29010

>остановился в изучении на теме "модули" и возник вопрос


либо в другой главе (что сомнительно), либо ты не понял мой вопрос
97 3129236
>>29132
видимо, ты тоже не понял мой вопрос
98 3129237
>>29136
я только читаю растбук и пока мне это ни о чем не говорит
можно пояснить?
99 3129248
>>29193
Ты интересуешься растом и мк - этого достаточно
Расскажи в двух словах, если сможешь, что за RTOS такие, для чего они, как использовать. Я пока на интуиции могу сказать, что это такой код, который подключается как библиотека, используется как фреймворк, где ты вкрыпываешь свой код в точки расширения. Сам по себе предоставляет абстракции типа потока, семафороф разных. Компилится с твоим кодом в один бинарь и заливается на мк. Где прав/где фигню нагадал? Чем можешь дополнить? Еще интересует, но предположений нет: поддерживают ли эти оси сон? Ну то есть, если задачи нет - он уходит в сон, чтоб мк потреблял по минимуму или ему приходится все равно поддерживать работу rtos?
Второй вопрос: я могу писать на расте для есп32 (лежит такая, как-то игрался)? Или раст поддерживают только определенные мк? Ну то есть там же разные процессоры, разные архитектуры, под какие архитектуры может компилить раст? Или обязательно еще должна быть инструментальная поддержка пот производителя? Алсо, когда игрался с есп, где-то видел какой-то конфиг с частотами там и все такое. Это как и куда задавать, если писать на расте?
Буду рад, если сможешь ответить хоть на что-то
100 3129428
>>29234

> ты не понял мой вопрос


>>29236

> ты тоже не понял мой вопрос


>>29019

> зачем делать модули по умолчанию приватными?


Внутри одного файла вышестоящий модуль может обращаться к нижестоящему модулю, игнорируя параметры доступа, так что модуль приватен для всех, кроме модуля в том же файле. Не?
101 3129531
>>29428

>Внутри одного файла вышестоящий модуль может обращаться к нижестоящему модулю


нет же
и файлы вообще не при чем, тут роляет дерево модулей
102 3129537
>>29016
>>29021
>>29132
>>29236
В общем, я нашел ответ на свой вопрос: смысл в приватных модулях есть, так как к нему имеют доступ братья (элементы одного модуля)

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=967c510e9d42b551950c17e102dc7356

даже внутренний модуль закрыт, но доступ получить можно
103 3129550
>>28768
Ебать дебил.
104 3129551
А можно для растц написать мэйк файл, чтобы не через эту ебалу каргу всё собирать?
105 3129556
>>29551
Можно. Но все скрипты придётся писать самому, если кто-то еще не заморочился.
106 3129607
>>29556

>Но все скрипты придётся писать самому


Поджавоскриптованный соевый зумерок-пидорок не палится.
107 3129621
>>29607
https://cmake.org/cmake/help/latest/command/enable_language.html
Можешь поискать в этом списке Rust.
108 3129696
>>29621
Я тебя понял, соя.
109 3129697
>>29248

>Где прав/где фигню нагадал?


Всё так.
110 3129723
>>29248

>Где прав/где фигню нагадал? Чем можешь дополнить?


Да в в целом всё верно. Ещё могу сказать, что обычно вендор железки предоставляет Board Support Package (BSP). Это такой пакет из ОС и драйверов, с примерами. Берёшь какой-нибудь и начинаешь его под свою задачу адаптировать. Но конечно никто не мешает выбросить это всё и сделать руками, если конечно имеется вся необходимая документация.

>Еще интересует, но предположений нет: поддерживают ли эти оси сон? Ну то есть, если задачи нет - он уходит в сон, чтоб мк потреблял по минимуму или ему приходится все равно поддерживать работу rtos?


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

>я могу писать на расте для есп32


да

>Ну то есть там же разные процессоры, разные архитектуры, под какие архитектуры может компилить раст?


https://doc.rust-lang.org/rustc/platform-support.html

>Алсо, когда игрался с есп, где-то видел какой-то конфиг с частотами там и все такое. Это как и куда задавать, если писать на расте?


Хз что за конфиг ты имеешь в виду. Если не с нуля писать будешь, то думаю найдёшь аналоги. Если с нуля, то читать документацию по железу.
111 3129756
>>29723
Спасибо, анон!
Но еще пара вопросов осталась

>Это такой пакет из ОС и драйверов


Драйверов? А что за драйвера и что они делают?

>указываешь когда уйти в состояние сна


А что для этого надо? Дергать код, который в референс мануалах к платам или ос предоставляет какуют-то абстракцию? И да, что происходит после пробуждения? Типа рестарт и запуск по новой или пытается восстановить контекст и продолжить работу с места, который останвился? Если второе, то кто за это отвечает: мк, ос?

>https://doc.rust-lang.org/rustc/platform-support.html


ох ты ж огромное тебе спасибо - тут надо курить, но есть откуда копать!
112 3130627
>>29756
Один только совет, не стоит на расте писать фирмвари, раст не для этого всё-таки.
113 3130654
>>30627

>не стоит на расте писать


Слова не мальчика, но мужа.

Алсо, на линкедине сейчас микрософт безуспешно ищет челов со знанием раста и опытом в гипервизорах. Все успели податься?
114 3131005
>>30627
Почему? Разве это не системный язык?
115 3131023
>>30627

>не стоит на расте писать фирмвари


>системный язык


ну вот все и встало на свои места, очередная джава/сисярп
116 3131084
Как же я заебался. Я просто хочу передать референс на синглтон в ансихронный tokio::spawn блок. Но говнине это очевидно не нравится (unsafe не помогает), и похоже единственный вариант пофиксить это через Мьютекс. Но есть одно но, синглтон делает веб запросы и при любом локе застревает на секунду, а то и больше. Трейта Copy у объекта нет, async move посылает меня нахуй, я просто не знаю что мне делать
117 3131090
>>31084

>я просто не знаю что мне делать


писать на джаве и не выебываться
там таких проблем нет
118 3131095
>>29756

>Драйверов? А что за драйвера и что они делают?


Мммм, драйвер — это код, управляющий каким-нибудь периферийным устройством.

>А что для этого надо? Дергать код, который в референс мануалах к платам или ос предоставляет какуют-то абстракцию?


Вручную — это когда ты пишешь всякие значения в разные управляющие регистры процессора и других подключенных устройств. Но обычно есть какой-то HAL (hardware abstraction layer), собственно набор тех самых драйверов, который идёт в составе того самого BSP и там уже всё это написано для тебя. ОС не предоставляют таких интерфейсов. Как ты говорил, это скорее фреймворк для построения прошивки.

>И да, что происходит после пробуждения? Типа рестарт и запуск по новой или пытается восстановить контекст и продолжить работу с места, который останвился? Если второе, то кто за это отвечает: мк, ос?


Да как сам напишешь, так и будет. Только выключение/включение с восстановлением контекста называется гибернацией, а сон — это перевод процессора и периферии в энергосберегающий режим, из которого они выходят по таймауту или по какому-нибудь сигналу. Работа прошивки в таком случае не прекращается, очевидно.
119 3131099
>>31084

>Но есть одно но, синглтон делает веб запросы и при любом локе застревает на секунду, а то и больше.


Не понял, а чего ты хочешь? Чтобы можно было из разных потоков его дёргать одновременно и играть в русскую рулетку, когда эта конструкция развалится?
120 3131100
>>31084
RwLock юзай вместо мудикса.
121 3131106
>>31084
Ну если тебе мутировать объект не нужно то мб RwLock вместо мутекса взять? Сколько угодно читателей можно будет иметь одновременно. Ну или ещё может как вариант во время когда ты держишь лок просто дать команду синглтону чето сделать (послать запрос) и дать ему колбек который дёрнуть когда будет ответ и сразу по фасту съебаться из критической секции и снять лок. Или ещё может не давтать колбек а давать команду синглтону сделать запрос и обновить своё внутренне состояние когда будет готово и после отдачи команды снимать лока и на вызывающей стороне изредка поллить синглтон на предмет готовности результата, ну либо может не поллить а сделать через кондвар какой-нить - типа вызывающий код блокируется на кондваре а синглтон обновляет кондвар когда ответ готов
122 3131112
>>31084
Вдогонку

>передать референс в ансихронный tokio::spawn блок


Ясен хуй не нравится, это recipe for disaster потому что хуй знает будет ли твой референс валиден когда его величество асинхронный рантайм соизволит начать выполнять таску. В std::thread есть скоупед потоки для этого, а в токио хз. Как ты это ансейфом решать хотел? Делать сырой указатель из референса? Ну так проблема никуда не девается если ты не на 100% уверен что он будет валиден когда будешь его разименовывать его
123 3131135
>>31084
Раз это синглтон, не проще мувнуть его в отдельный тред, а запросы через каналы mpsc буферизированные посылать? Где-то видел такие, которые и в синк и асинк могут одновременно.
124 3131138
>>31095

>есть какой-то HAL


Он для каждой борды свой? То есть не универсальный, а производитель создает свой со своим набором АПИ?

>>31095

>Да как сам напишешь, так и будет


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

>>31095

>Работа прошивки в таком случае не прекращается


А что ты под этим имеешь в виду? Что все контексты сохранены, что все выполняется? Просто я читал про разные виды сна когда-то по-диагонали, и там процессор чуть ли не выключался, в работе оставался таймер. То есть ты хочешь сказать, что при пробуждении по таймеру, например, автоматически платой в кэш загрузится все то, что было до сна, стэки тоже и процессор просто продолжит оттуда, откуда остановился? Не очень понимаю как это в коде выглядит... Он продолжит выполнять все то, что идем после вызова sleep()?
125 3131171
>>31135
Если честно не знаю как это должно работать, потому что запрос у меня блокирует поток пока не резолвнется. Поэтому и раскидал параллельные запросы по потокам. Сделал через RwLock как тут советовали, в принципе нормально, спасибо анонам
image.png296 Кб, 952x760
126 3131186
Коллеги, жизненно?
127 3131200
>>31186
Пост писал трансфоб
128 3131397
>>31084
А как у тебя синглтон реализован? Я вот так накидал, например.
https://pastebin.com/PxYzdTgb
129 3131591
>>31186
Бери токио и не еби мозги
130 3131628
>>31084
>>31397
Вообще считаю синглтон антипаттерном.
131 3131713
>>31186

>try_get()::unwrap()


Теперь это не РЯЯ_АНСЕЙФ язык а UNWRAP()::UNWRAP().
132 3131716
>>31186

>sleep


>spin_lock


Мне вот интересно, чем думал Линус пуская этих вредителей в ядро.
133 3131749
>>31716
Шиз спок, это не стандартная либа а рандомная хуитка с крейтс.ио
134 3132029
>>31749
Причина UNWRAP'а?
135 3132057
>>32029
Ты неправильно шутишь, лучше так:

- Причина паники?
- ".unwrap()"
136 3132072
>>31397
У меня в целом похоже, но вместо Box у меня Arc::new(RwLock::new(worker))
137 3132215
>>32057
Причина гонки?
138 3132343
>>32215

>Причина гонки?


Лучший.
139 3132407
>>31138

>Он для каждой борды свой? То есть не универсальный, а производитель создает свой со своим набором АПИ?


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

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


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

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


Это действительно так. В популярном кортексе например их парочка и вендоры ещё бывают свои добавляют. Чем экономичнее режим тем меньше он отличается от полного выключения.

>То есть ты хочешь сказать, что при пробуждении по таймеру, например, автоматически платой в кэш загрузится все то, что было до сна, стэки тоже и процессор просто продолжит оттуда, откуда остановился?


Как писал, зависит от режима и железа. Если говорить про тот же кортекс, то обычно ничего там никуда во сне не девается. Т.е. оперативка хранит содержимое, регистры тоже. Обработали прерывание и вперёд, дальше молотить.

Вообще, я если честно слабовато эту тему знаю. Сейчас порылся по коду проекта, над которым сейчас работаю, так там WFI (инструкция, которая переводит в режим сна) есть и в HALе и в ядре RTOS. Напиздел я получается, насчёт того что в ОС не бывает. Я правда глубоко не стал лезть, используется ли у нас где-то сон из FreeRTOS. Возможно там разница как раз в выборе режима, типа FreeRTOS переводит проц в обычный sleep при необходимости, например, когда все таски заблокированы. Deep sleep из HALа точно ручками дёргаем.
139 3132407
>>31138

>Он для каждой борды свой? То есть не универсальный, а производитель создает свой со своим набором АПИ?


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

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


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

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


Это действительно так. В популярном кортексе например их парочка и вендоры ещё бывают свои добавляют. Чем экономичнее режим тем меньше он отличается от полного выключения.

>То есть ты хочешь сказать, что при пробуждении по таймеру, например, автоматически платой в кэш загрузится все то, что было до сна, стэки тоже и процессор просто продолжит оттуда, откуда остановился?


Как писал, зависит от режима и железа. Если говорить про тот же кортекс, то обычно ничего там никуда во сне не девается. Т.е. оперативка хранит содержимое, регистры тоже. Обработали прерывание и вперёд, дальше молотить.

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

>>32421
>>32426
Вкину свои 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.
144 3134234
Раст хвастались своей безопасностью, а оказалось, что все программы для Windows, написанные на расте, содержат критический баг.
145 3134268
>>34234

> содержат критический баг


Ржавчину?
17045791342250.jpg196 Кб, 686x686
146 3134297

> 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.


Сперма.
147 3134311
>>34297

> критический баг в std


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

> improperly escaping arguments


Там вообще ебучий цирк с конями в std под виндой, как будто студенты писали. Например тот же принт, конвертирующий два раза строку из utf-8 в utf-16, вместо вызова SetConsoleCP. Это сразу было понятно, что снизив уровень входа с помощью "безопасности", пришедшие питонисты начнут писать такое забагованное говно, что нейросети позавидуют.
148 3134387
>>32661
Спасибо.
Я об этом в растбуке читал, но вдруг кто-то не читал.
149 3134453
>>34311

>растоделы набажили в стандартной библиотеке


>чертовы питонисты

150 3134687
>>34311

>Например тот же принт, конвертирующий два раза строку из utf-8 в utf-16, вместо вызова SetConsoleCP



В API винды поддержка utf8 появилась примерно вчера, и работает через жопу.
151 3134799
>>34687

> В API винды поддержка utf8 появилась примерно вчера


XP вчера появился? Ну ладно. CP65001 в консольке как минимум с Висты работает, в XP он тоже был, но я не возьмусь утверждать что cmd.exe корректно шрифты рендерил.

> работает через жопу


Если речь про вывод в консольку, то он работает как часы, никаких проблем нет. Проблемы могут быть только если ты при включенном CP65001 станешь выводить UTF-16 туда.
Претензия к реализации раста в том что у него всё к UTF-8 прибито гвоздями. То что он в рантайме каждую строку конвертит - это пиздец костыли. Я ещё понял бы если он поддерживал UTF-16 строки и можно было бы без конверсии их использовать, но ведь нет.
152 3134819
>>34799
OsStr на винде utf-16
153 3134835
>>34799
https://learn.microsoft.com/ru-ru/windows/apps/design/globalizing/use-utf8-code-page

Чтобы винда правильно поняла твою кодировку, нужно указать параметр в какой-то ебать её в сраку эксемельке. То есть, если приложение линкуешь не ты, а просто передаёшь свою либу, то может оказаться, что там настроен какой-нибудь EBCDIC, а твой текст выглядит как даэдрические письмена. И даже не весь WinAPI умеет с этим работать, и иногда всё-равно придется мудиться с этим преобразованием.
154 3134848
Как уменьшить размер бинарника с 500Кб до 16Кб?
155 3134849
>>34819
И куда ты её деть сможешь? Даже принт не примет её. И она всё так же в рантайме работает, конвертируя строки в UTF-8.
>>34835

> указать параметр в какой-то ебать её в сраку эксемельке


Чел, у тебя документация от WindowsApps, очнись. Это никакого отношения к WinAPI не имеет. Ты бы ещё UWP притащил сюда.

> То есть


То есть ты бредишь, одним вызовом функции консолька переводится в нужную кодировку. Вот правильное место в документации:
https://learn.microsoft.com/en-us/windows/win32/intl/unicode

> И даже не весь WinAPI умеет с этим работать


Ему строго поебать как и чем строка закодирована. Передашь UTF-8 - он будет с UTF-8 работать. Для WinAPI строка это просто указатель на чар.

> придется мудиться с этим преобразованием


Только если в UTF-16 строка. Чем собственно в расте и занимаются, когда можно было не делать этого.
image271 Кб, 640x640
156 3134927
157 3134951
>>34848
Пиши на языке, который ближе к железу.
16820248503090.mp49,8 Мб, mp4,
352x640, 0:21
158 3134958
>>34848
UPX здесь не поможет
159 3134966
>>34849

>Чел, у тебя документация от WindowsApps, очнись. Это никакого отношения к WinAPI не имеет. Ты бы ещё UWP притащил сюда.



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

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



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

>Для WinAPI строка это просто указатель на чар.


Ну здрасьте приехали. И зачем тогда каждый вызов дублируется с суффиксом A и W, зачем нужны локали, чем Windows-1251 отличается от CP-866?
160 3134969
>>34966

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


Это вообще совершенно разные вещи. WindowsApps - это свежее крестовое API из 11 винды.

> И зачем тогда каждый вызов дублируется с суффиксом A и W


Затем что в винде есть UTF-16 и всё остальное, сделано для совместимости с однобайтным легаси времён начала нулевых. Всё остальное под А, работает в заданной кодировке, если кодировка указана как UTF-8, то оно и будет.
161 3135030
>>34969

>Это вообще совершенно разные вещи. WindowsApps - это свежее крестовое API из 11 винды.



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

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



Иными словами, UTF16 - всё также остаётся основной кодировкой, а UTF8 - это бедный родственник, который зависит от глобального состояния или манифестов, которые хер знает кто выставляет и может поменять в любой момент. Я прямо уверен, что винда делает такую же конвертацию, что std Раста.
162 3135046
>>35030

> Может потому что это на самом деле обертка над winapi?


Нет. Это уже то, на чём встроенный виндовый софт пишется в 11 винде, там WinAPI не используется вообще, это легаси.

> Иными словами


Иными словами ты нихуя не понял.

> UTF8 - это бедный родственник, который зависит от глобального состояния или манифестов


Глобальное окружение и манифесты - это каким будет дефолт. Контроль за кодировками у софта.

> Я прямо уверен, что винда делает такую же конвертацию


Чел, я тебе даже кидал ссылку из документации WinAPI, там нативная поддержка UTF-8. Алсо, виндовый терминал который в 11 винде по умолчанию в WSL окружении переключает вывод в UTF-8 и оставляет линуксовый выхлоп как есть, а не занимается хуитой как растаны с конверсией в UTF-16.
163 3135051
У меня вопрос, если всех заебал сишный УБ, хочется писать действительно надёжный софт, хули вы побежали на дырявый раст для пидоров, а не выбрали мужскую Аду? Трансовики, оправдывайтесь.
Screenshot20240425-153337.png367 Кб, 1440x3120
164 3135115
>>35051

>а не выбрали мужскую Аду?


Это говно уже окаменело.
165 3135120
>>35115
Один абзац текста и 5 абзацев предупреждений. Я такое говно только в консультант+ видел: параграф ХХХ утратил силу.
166 3135140

>Это говно уже окаменело.


>Один абзац текста и 5 абзацев предупреждений. Я такое говно только в консультант+ видел


Какие же пидорасты долбоёбы пиздец. Бегом писать прошивки для баттплаг.ио.
167 3135201
>>35140
Причина баха?
168 3135219
>>35140
Пукнул и слился. Ясно.
мимо мейнтейнер баттплаг.ио
169 3135301
>>35046

> Нет. Это уже то, на чём встроенный виндовый софт пишется в 11 винде, там WinAPI не используется вообще, это легаси.


Зуб даёшь? Я ведь сейчас в репу залезу и проверю как они винапи не юзают.
1684262401757.png254 Кб, 1972x1732
170 3135380
>>35301
Ну давай. Пикрилейтед в самом SDK, WinAPI там используют только для разработки - в юнит-тестах и при логировании, на случай когда что-то отъебнёт. В сорсах естественно оригинальное WinAPI не трогают, частично оно переписано на крестах для обратной совместимости. Ну и там белым по чёрному написано - первым делом удаляйте все хедеры и либы WinAPI и заменяйте на WindowsApps.
image45 Кб, 1041x889
171 3136051
>>35051
Навернул я этого говна, спасибо. Помимо того, что дока бедная, а от иде там только название, эта самая Ада нечеловечески неудобна. Похоже, что при её создании применялась та же парадигма, что и в жабе: "искуственно переусложнено - значит безопасно". И ты ж, сука, зацени иронию:
☑ вызвать функцию игнорируя возврат - ошибка
◻ харкнуть иксепшон в любом месте и забить на перехват - пожалуйста
◻ нормального Result - нет
◻ хочешь, чтобы твоя память освобождалась сама? - изволь использовать Finalization

У меня была идея использовать аду в алготрейдинге громко звучит только из-за её интервальных типов, которые там то, что доктор прописал. Но без нормального Result - хз, скорее всего забью. Единственный Result, который там можно сделать - тупо контейнер без map и прочего сахара, так как с дженериками там всё очень хуёво, анонимных функций тоже нет.
172 3136088
>>36051
Что за IDE?
173 3136106
>>36051

>вызвать функцию игнорируя возврат - ошибка


Это заебись, так и надо делать, вспомни ещё в Си базовый флаг флаг -Werror.

>харкнуть иксепшон в любом месте и забить на перехват - пожалуйста


Ты просто не понимаешь сути эксепшенов.

>хочешь, чтобы твоя память освобождалась сама? - изволь использовать Finalization


Обычный базовый язык, в спарке вообще куч нет (хотя в новом вроде завезли).
174 3136152
>>36106

>Ты просто не понимаешь сути эксепшенов.


В Аде смузихлёбский подход а-ля котлин, в той же джаве с ними и то построже. Один хрен, я бы продпочёл Result, но его нет.

>>36088

>Что за IDE?


gnat studio
Говнецо ещё то, но базовые вещи делает. Написано на самой аде + дохрена питона. Чсх, у них есть коммерческая версия под раст. В поставке appimage постоянно чего-то не хватает, вот, например, оно пытается позвать внешнюю утилиту и не может.
175 3136940
Так, ну и почему у вас бинарники большие? Сборки мумора в рантайме нет, бибнумы и джит отсутствуют. Шо там, копирование инлайном 1000 раз?
176 3136942
>>36940
Там стд, всегда с собой носит всё говно.
16977255373760.jpg48 Кб, 309x416
177 3136979
>>36942
Символ не надо линковать, если он не нужен.
178 3136981
>>36979
Твоего мнения никто не спрашивал. Линкуют потому что могут. И хули ты сделаешь им?
179 3136989
>>36981
Не буду молчать.
180 3137190
В каком редакторе можно писать код на расте? Пробовал вс код - не понравилось. Официальный плагин написан через жопу, постоянно отваливается, глючит. Видимо не случайно там сделана кнопка "перезапустить". Ни для одного языка не видел более убогого плагина.
181 3137192
idea-rust.jpg16 Кб, 421x192
182 3137194
>>37192
А бесплатные варианты есть?
image412 Кб, 1728x1708
183 3137199
>>36979
Это поведение по умолчанию наверное для какого угодно компилятора.
184 3137214
>>37199
Оптимизации включать пробовал? В крестах такого говна нет. Даже в винде если захотеть весь vcruntime статически прилинковать например чтоб на XP запускать, то будет всего 130 кб весить бинарник. По умолчанию там 10 кб бинарники, вц-рантайм в системе всегда уже есть, если 10+ винда. В расте же 350+ кб всегда.
185 3137218

> Disclaimer: This post is a very long collection of thoughts and problems I've had over the years, and also addresses some of the arguments I've been repeatedly told. This post expresses my opinion the has been formed over using Rust for gamedev for many thousands of hours over many years, and multiple finished games. This isn't meant to brag or indicate success, but rather just show there has been more than enough effort put into Rust, to dispel the the commonly said "once you gain enough experience it'll all make sense" argument.


https://loglog.games/blog/leaving-rust-gamedev/
186 3137222
>>37194
Конечно, вот для vim https://github.com/rust-lang/rust.vim
image208 Кб, 1424x1246
187 3137224
>>37214

>В расте же 350+ кб всегда.


Это ложь.

Про манёвры с оптимизацией я промолчу, раст тоже можно до усрачки оптимизировать. Моё сообщение было о другом. Для тех кто не понял — напишу более подробно: LTO нигде по умолчанию не включён и все символы всегда попадают в бинарник. Это так-то нефига не тривиальная задача, исключить ненужные.
189 3137230
>>37218

> https://github.com/ziglang/zig/issues/335


Вот с этого я реально ахуел. Андрюхе там уже совсем нехуй делать, уже в открытую издевается над людьми.
190 3137237
>>37224

> Это ложь.


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

> LTO нигде по умолчанию не включён


Зато он почти везде включен при оптимизациях. Но в расте хоть включай, хоть выключай - всё равно насрёт в бинарник или надо таскать с собой либы.

> Это так-то нефига не тривиальная задача, исключить ненужные.


Даже в дотнете с этим справились, кода пилили AOT-компиляцию в нативный код. А ведь там даже есть рантайм-рефлексия.
191 3137242
>>37230
Голанг - это издевательство над людми?
193 3137246
>>37222
>>37229
Я слышал, что есть какая-то новая иде для раста, но она вышла только на макоси, но обещают сделать и для остальных.
194 3137247
>>37218

>does what it's supposed to while keeping its codebase readable, the last point being quite rare in the Rust ecosystem


))
195 3137251
>>37237

>Зато он почти везде включен при оптимизациях.


Ложь.

>Но в расте хоть включай, хоть выключай - всё равно насрёт в бинарник или надо таскать с собой либы.


Чем насрёт-то?

Остальной оффтопик в виде дотнета, винды и прочих майкрософтовых поделок обсуждать не могу — не пользуюсь их продуктами уже лет 15, кроме гитхаба (увы). Наверное, там действительно всё плохо хотя казалось бы куда ещё...
196 3137259
>>37199

> по умолчанию


> -static


Старайся лучше.
197 3137260
>>37242
Я не ГОвнарь, может там как-то по другому это реализовано. Но вон в конце прошлого года Андрюха выкатил костыль в виде автоформатирования с чисткой от неиспользуемых переменных. Челы всё правильно пишут про жопную боль когда хуяк-хуяк делаешь, а автоформат не ослабляет жопную боль, только создаёт потенциальные баги. Вот ты условно в поисках багов жонглируешь переменными, некоторые из которых неиспользуемые, а где гарантия что используемая в данный момент - это то что должно быть по задумке? Автоформат стёр их и всё, код допустим не твой, там может что-то сломано и никто не узнает об этом до появления проблем. В любом нормальном ЯП тебе будут идти варнинги и ты всегда будешь знать что вот там какой-то пердолинг происходил и с ним надо будет разобраться руками.
Отдельно проиграл с пердоли, предлагающего искать в сорсах подчёркивания регулярками.
1562706434521.mp42,6 Мб, mp4,
480x360, 0:16
198 3137265
>>37251

> кроме пердоликса ничего не нужно


Сразу бы с этого начинал.
199 3137268
>>37199
Ты не старался понять мысль. Это ответ на утверждение, что якобы символы не линкуются если они не нужны. Ты можешь и с динамической линковкой собрать, там не так впечатляюще будет "насрато" конечно, но всё равно будет куча "лишних" символов почему-то.
200 3137269
201 3137272
>>37265
Рад, что ты со мной согласен.
202 3137287
>>37268
Так тебе вроде сказали, что с -O3 там не будет этого мусора. А то в одном месте без оптимизаций, а в другом --release с какими-то ключами.
image199 Кб, 1424x1246
203 3137296
>>37287

>Так тебе вроде сказали, что с -O3 там не будет этого мусора. А то в одном месте без оптимизаций, а в другом --release с какими-то ключами.


Анус ставишь? То что мне сказали свидетельствует только о непонимании говорящих о том что такое -O3, --release, LTO, динамическая и статическая линковка. Да вы вообще не понимаете как линкер работает, лол. Зато радостно цепляетесь за различия в дефолтных настройках компилятора.
204 3137298
>>37296

> Да вы вообще не понимаете как линкер работает, лол.


Это ты не понимаешь, ведь unused_fn у тебя используется.

> Зато радостно цепляетесь за различия в дефолтных настройках компилятора.


Так ты покажи что будет по дефолту в расте, не стесняйся. А то сначала про дефолт речь шла, а как до раста дошли так сборка с ключами.
205 3137307
>>37296
Чел, в сишке нет модулей и все глобальные функции экспортируются. Ты можешь их динамически импортировать в другом бинарнике, как будто это либа, а не исполняемый файл. Поэтому у тебя нет неиспользуемых функций. А вот если бы ты на крестах с модулями написал, то там без явного указания необходимости экспортировать компилятор удалил бы всё это. Учи базу.
image224 Кб, 1424x1246
206 3137308
>>37298

>Это ты не понимаешь, ведь unused_fn у тебя используется.


Как она используется и почему без неё всё работает?

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


Будет как и в любом другом языке при использовании статической линковки. Не помню, чтобы речь шла про дефолты. Первое упоминание этого слова в треде в контексте компиляторов — в моём посте.
207 3137309
>>37307
>>37308

Как перестать орать в голос?
208 3137316
>>37308
Ты так и не показал что будет в расте, только виляешь жопой и никак не можешь объяснить почему у раста такие жирные бинарники. С динамической линковки вдруг перескакиваешь на LTO и обратно.
Ответь на простые вопросы уже: почему LTO в расте не вырезает мусор и зачем ты отделив мусор динамической линковкой притворяешься что его теперь нет?
209 3137319
>>37265
Автор видоса хоть понимает смысл колясочника в линуксах?
210 3137325
>>37316
Я смотрю мы уже прекратили обсуждать попадание "лишних" символов в бинарник и перешли к обсуждению жирности последних? Ну так я и не виляю жопой. Я только не согласился с утверждением >>37214, что растовые бинарники весят больше 350Кб безотносительно способа сборки. И привёл наглядный пример. Выводы за меня ты уже сам начал делать, кек. Ладно, чао, эта тема мне уже не интересна, её обсосали 100 раз до этого.
211 3137332
>>37308

> при использовании статической линковки


А как в расте статически прилинковать всё, чтоб понимать сколько говна он носит с собой? Я вот сейчас собрал под виндой, а там динамически прилинкован рантайм сишки и крестов, на полтора мб, лол. В линуксе наверняка libc линкуется, поверх сотен кб самого раста.
>>37325

> перешли к обсуждению жирности последних


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

> эта тема мне уже не интересна


Норм ты слился, так и не сказав ничего по сути вопроса.
212 3137337
>>37332

>А как в расте статически прилинковать всё, чтоб понимать сколько говна он носит с собой?


Он по дефолту так делает, поэтому просто cargo build. Добавление --release этого не меняет, если что.

>Вроде про это и был разговор?


Нет, я это не обсуждал, хотя меня почему-то постоянно пытались вывести на это. Более того, я изначально в >>37199 и раст-то не упоминал, лол. Повторю, мне эта специальная олимпиада не интересна. Другие темы готов пообсуждать.
213 3137346
>>37337

> Он по дефолту так делает


Нет. Вот тут ты пиздишь в наглую. Запусти и посмотри в рантайме что он налинковал динамически. В крестах под виндой если собрать с /MT, то он реально статический билд сделает, вообще без динамической линковки, аж на 130 кб. Но в расте там две dll висят.
image352 Кб, 2768x1918
214 3137370
>>37346

>В линуксе наверняка libc линкуется, поверх сотен кб самого раста.


Кстати, да, это интересный вопрос оказался. У меня такой результат. Получается примерно 700 кб libc и ещё 700кб между растовой библиотекой и libgcc_s (сложно сказать в какой пропорции). Остальное думаю пренебрежимо мало. Хотя и libgcc_s думаю тоже крошечная, доводилось в её исходники лазить.

Почитать про волшебные флаги если интересно: https://doc.rust-lang.org/reference/linkage.html#static-and-dynamic-c-runtimes
215 3137373
>>37370
Крутые утилиты на скрине. А в венде есть такие?
216 3137374
Вы ёбнутые? Сейчас даже ебаный калькулятор на андроид 100МБ+ весит, собирайте статический бинарник и не ебите мозг.
217 3137377
>>37370
Теперь бы ещё узнать что будет если таких либ не найдено. Или libc какой-то очень не той версии, что была при сборке. У ГОвна вроде реально портативные бинарники под линуксом, хоть и жирные в несколько мб.
218 3137378
>>37373
https://packages.msys2.org/package/mingw-w64-x86_64-binutils
я вообще мингв шелл на постоянной основе в винде использую вместо смд/павершелла, охуенная тема
219 3137386
>>37370
Под виндой на первом скрине msvc тулчейн, на втором gnu. gnu генерит бинарник аж на 1.1 мб. И нахуя ему сокет я не понял, это хеллоу ворлд, зонды линукса какие-то.
220 3137404
>>37374
Я кстати, соглы. Особенно, если учесть, что одинаковые страницы памяти всё равно будут общими. Страдает только место на диске, но они всё равно безразмерные нынче.

>>37377
Что-то не очень понял, что ты имеешь в виду. Либ тут никаких не требуется. А если ты запускаешь приложение слинкованное с версией библиотеки, которая не совместима с ядром, то будет упавшее приложение. На винде попроще с этим, там над обратной совместимостью трясутся.
221 3137414
>>37374
Для малварей важно. Как малвари писать на расте с таким?
222 3137654
>>37374
>>37404
Менеджер Сосунг, спок.
223 3137717
>>37374
Лол, эффективный язык. Может сразу на джаве тогда писать и проблем с боров-чекером не иметь? Ну раз +-100 МБ погрешность
224 3137726
>>37717
Мы пользуемся растом не из-за размера бинарника, а как раз из-за боровчекера. Нам нравится, когда создаваемые программой данные освобождаются автоматически и zero-cost-ово.
225 3137739
>>37726
Так в джаве они тоже освобождаются автоматически

>zero-cost-ово


Просто мантры https://verdagon.dev/blog/myth-zero-overhead-memory-safety , такие же как раньше были про маленькие артефакты компиляции
inb4 аррряяя, тебе чего пару мс жалко чтоли, не еби мозг!
1714298939574.png14 Кб, 192x192
226 3137755
>>37739
Чё тебе пару милисек жалко штоле? Не еби мозг!
227 3137757
>>37386

>gnu генерит бинарник аж на 1.1 мб.


Он по умолчанию символы не стирает. Надо с -s собирать или strip --strip-unneeded сделать.
228 3137767
Зрада зрадная. Раст оказался нинужон в геймдеве:
https://loglog.games/blog/leaving-rust-gamedev/
В комментах заливают копиум бочками:
https://news.ycombinator.com/item?id=40172033
229 3137780
>>37767
Ты-то куда лезешь игроблять со своим гейдевом?
image.png326 Кб, 600x600
230 3137787
4304a42b1fbefa6bdd99ae8b2cf9b341.jpg81 Кб, 800x600
231 3137810
>>37780
Я вообще пытался вкатываться в геймдев на Go.
232 3137817
>>37218
>>37767
>>37780
Ещё и тред не читает, лишь бы насрать.
233 3137835
>>37246
наверное перепутал: не для раста, а на расте
https://zed.dev/download
234 3137843
>>37246
RustRover?
235 3137860
>>37237

>Даже в дотнете с этим справились, кода пилили AOT-компиляцию в нативный код. А ведь там даже есть рантайм-рефлексия


Она не работает, там надо вручную прописывать элементы, которые ты через рефлексию трогаешь, чтоб linker лишнего не порезал и прилага не упала в рантайме. Те же грабли с разными ioc-контейнерами, json-парсерами и всякой лабудой, которая работает на рефлексии или уже, подозреваю, на кодогенерации рослином. Да и как ты себе представляешь, то linker не порежет тебе класс, например, который ты в рантайме определяешь?

мимохочусбежатьнарастсдотнета,провожуразведку
236 3137932
>>37404

> Особенно, если учесть, что одинаковые страницы памяти всё равно будут общими


так разные файлы будут лежать в разных страницах, не?
237 3137969
>>37218
Итак, выяснили что раст не для системного программирования, теперь выяснили, что раст не подходит для гейдева. Как так, пидорасты?
238 3137972
>>36152

>-Один хрен, я бы продпочёл Result, но его нет.


>-Ну на вот тебе Result


>...


>func().unwrap()


>func1().unwrap()


>func2().unwrap()

240 3137988
>>37969
Пока только выяснили, что твоя мамаша шлюха, а папаша - членодевка.
242 3137997
>>37988
Ты выше почитай, челик разрабатывал реальные игры на пидорасте в течении 3-х лет, его мнение чего-то да стоит, а твоё - тупо мусор.
243 3138001
>>37991
Там выше челик жаловался, что в аде можно не обрабатывать исключение, мол, не правильно это, а ты тут с затычкой в виде ? прибегаешь лол.
244 3138015
>>37997

>пук-среньк, обратите внимание уже на эту ссылку


Челик, просто иди нахуй. Мало у кого есть желание читать чей-то километровый провокационный высер на неродном языке. Хочешь обсуждения — напиши вкратце про что там или хотя бы что тебе больше всего понравилось.
245 3138021
>>38001
Так это и есть обработка, не так разве? Минимально придётся типы ошибок приводить.
246 3138023
>>38015

>провокационный высер на неродном языке


Русорастофобский пост
Просто 10/10 реакция.
247 3138031
>>38023
Ну я так и понял, что кроме заголовка и первого параграфа ты сам не читал.
248 3138039
>>38031
И как ты это понял, свидетель пидораста?
249 3138050
>>38039
Так прочитай хотя бы второй параграф. Ты делаешь вывод о целом языке исходя из очень специфического опыта конкретных людей. Там автор сам пишет, что его опыт нельзя экстраполировать. Повторю, там много всего понаписано, возможно по делу, но лично у меня нет никакого желания в это вникать. Тем более, чтобы беседу с тобой вести, сам-то ты этого не делал.
250 3138051
>>38050

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


Вся суть пuдopaшки. Если кто не понял, годная статья, стоит вообще всем читать.
251 3138083
>>37860

>ты в рантайме определяешь


используешь*
долгофикс
252 3138120
>>37984
Ого, не знал. А как это работает? Ядро не устанет память сверять кусок за куском? Вряд ли для этого хэш-мапу заводили
253 3138213
>>38120
Хэшировать страницы дешевле, чем грузить-выгружать.
254 3138231
>>38120
Да устаёт, конечно. Хешмапой это и реализовано, насколько я знаю. Но я слукавил, на самом деле это нигде не включено по умолчанию.
1658836264556.mp43,3 Мб, mp4,
140x228, 1:10
255 3138233
>>38231

> слукавил


Проще говоря напиздел, наебал, высрал дезу.
256 3138236
>>38233
Ага, насрал дезу тебе за щеку.
257 3138502
В каком бреду надо было придумать такой синтаксис?
let x = {
let y = 1;
y + 1
}
258 3138508
>>38502
Иди нахуй.
259 3138527
>>38502
А в чём проблема?
260 3138538
>>38502
Пошёл нахуй, кретин
261 3138539
>>38502
Пародия на sml
let val x = let val y = 1 in y+1
262 3138550
>>38539
Ты заблудился? Вали нахуй с треда.
263 3138665
>>38502
Завтра ищешь в интернете книжку Introduction to the theory of computation. Пофиг если ничего не поймешь. Затем идешь на www.agner.org и изучаешь микроархитектуру процессоров от корки до корки. Потом зубришь, именно, сука, вызубриваешь нотацию гомотопной теории типов, чтобы от зубов отскакивало.
Когда напишешь свой первый однопроходный компилятор, по пути изучив ассемблер, скачиваешь и изучаешь изучаешь любой фреймворк для кроссплатформенной кодогенерации, рекомендую LLVM или C--. Как переделаешь компилятор, чтобы имел по крайней мере вывод типов по Хиндли-Милнеру, можешь идти дальше - тебя ждет увлекательный мир оптимизаций. Многопоточность, сверхбыстрая векторизация, ленивые итераторы. Отсос хиккующих выблѣдков / просто неудачников типа Тима Пайка или сисярп/джава-удососов, которые сосут уд по жизни не заставит себя ждать и уже через пол года твой фаундейшен ты будешь получать такие суммы, что любая трансдевочка будет течь при одном упоминании твоих контрибьюторов.
264 3138703
>>38665
Я уже писал компиляторы без всей этой лабуды по книге дракона (Ахо, Ульям).

Речь про то, что программисту надо следить за этой точкой с запятой в конце, от чего зависит семантика. Это настолько тупое решение, что не передать.
265 3138710
>>38703
А как было бы лучше по твоему мнению?
266 3138728
>>38502
В кокаиновом
267 3138732
>>38703
Зато односложные лямбды выглядят заебок.
let double = |x| x * 2;

Чем людям мешают эти точки с запятой? Нанюхаются своего питона, понимаешь.
268 3138735
>>38703

> От чего зависи семантика.


1. Любой блок возвращает что-то. Даже пустой блок возвращает ().
2. Лишний ; меняет тип взвращаемого значения всегда, компилятор почти сразу находит несоотвествие типов и сообщает об этом разрабу.
Твоя проблема надумана.
269 3138740
>>38710
return или закорючку какую-нибудь в конце
...
y + 1 ->
}
270 3138746
>>38740
Но return нельзя использовать, т.к. он сам по себе возвращает ! или never (https://doc.rust-lang.org/std/primitive.never.html). Ну и в замыкании его семантика будет неясна. А в чём принципиальная разница между отсутствием ; и закорючкой в конце?
271 3138763
Хотя про замыкание спизданул не подумав, забей.
272 3138784
>>38001
Чтобы использовать ? у тебя в сигнатуре должен быть явно задан тип, для которого этот ? разрешено использовать. То есть, какую попало ошибку ты при помощи ? не пробросишь.
Если возможных ошибок несколько и все охота пробросить, то можно привести через enum к общему типу ошибки и пробрасывать уже его или проще через специальные сторонние макросы.
273 3138790
>>38001

>в аде


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

https://github.com/rust-lang/rust/pull/107606
https://rust-lang.zulipchat.com/#narrow/stream/144729-t-types/topic/Implementing.20Enum.20Variant.20Types/near/322878006
https://github.com/disiamylborane/ranged_integers
1580097340128.mp4488 Кб, mp4,
1280x720, 0:02
274 3138802
>>38763

> спизданул


Опять хотел уважаемых растанов наебать?
275 3138823
Реально ли устроится сейчас на работу на Rust? Что надо кроме языка знать?
276 3138828
>>38823
Опыт работы на с/с++ от 6 лет, высшее образование, знание линукса, сетевых протоколов, алгоритмов и структур данных
277 3138842
>>38828
Под Виндоуз. Опыт администрирования БД приветствуется. Знание Python будет большим плюсом.
278 3138893
>>38508
>>38538
Говорят, что соевый язык, а порвались как настоящие базовики.
fibonachi.jpg124 Кб, 1031x828
279 3139392
Я правильно решил?
280 3139472
>>39392
Обычно числа с 0 считают, а не с 1. Дополнительную переменную в расте не обязательно заводить, можно написать что-то вроде:
(fib2, fib1) = (fib1 + fib2, fib2). Вместо цикла можно использовать свёртку: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=f2e2094c70a2e1cc21dca59b2b12f8ea , если эстет дохуя.
281 3139476
>>39472
Но ведь числа Фибоначчи - это математическая последовательность, а не компьютерный массив данных, поэтому логично считать её начиная с 1, а не с 0.
282 3139479
>>39392

> рантайм вычисления


Это ты так траллишь, да?
283 3139480
Мда, ухитрился объебаться с фолдом, хотя результат правильный, но так лучше:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=8832f228da0cc71237ad7910421d6914
284 3139483
>>39476
Последовательность, да, которая определяется так:
fib(0) = 0
fib(1) = 1
fib(n) = fib(n - 1) + fib(n - 2)

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

Сори, неправильно выразился, когда писал про подсчёт чисел. Не проснулся ещё.
285 3143896
Что нужно знать/уметь чтобы найти/устроиться на работу на сабже? Что вообще на собесах спрашивают? Что лайвкодят если вообще кодяд?
286 3144149
>>43896
Тестовое дали, потом недели 3 или месяц проверяли, детально придирались, чуть ли не к каждому слову, что я память лишнюю высвободил, по растовским меркам если ты сделал временную переменную и скопировал значение туда, то это нохайр автоматом.
287 3144182
>>44149
Ты может в какую-то эмбедед дрочильню подавался?
image.png37 Кб, 558x489
288 3145667
Я правильно понимаю что единственный способ заставить этот код работать это обернуть в RefCell?
289 3145710
>>44182
Ты думаешь у тебя прям другой случай и всё будет НИ ТАК? И не будет миллипридирок к лишнему освобожденному байтику? Лул.
290 3145758
>>45710
Конечно. Я талантливее, способнее и самостоятельнее большинства кодерков. А проблемы с лишними байтиками это чисто рабочий момент который разрешается на уровнях кодревью/дрочева дев окружения/репортов с прода.
image.png5 Кб, 289x107
291 3145879
>>45667
Можно немного проще.
image.png64 Кб, 1920x1036
292 3145888
>>45879
Можно ещё проще
1672748202169.mp42,3 Мб, mp4,
2738x1708, 0:14
293 3145924
>>45888
Нахуй в браузер заходить. В 2k24 код вот так пишут. Хорошая IDE умеет за тебя писать код.
1714936887301.png23 Кб, 657x277
294 3145933
>>45924
Напиши туда инструкцию, чтобы она написала тебе код программы, которая висит значком в трее и контекстным меню показывает опции

> Следующая картинка


> Показать окно


> Выход


Окно пикрелейтед.
Посмотрим, как твой цопелот справится.
1712431992107.png371 Кб, 2578x1733
295 3145966
>>45933
Ну оно не умнее меня. А я не знаю какие либы надо для этого взять сходу. Оно код пишет, winapi знает, но импортит странное, какая-то ебля с либами нужна. На крестах с инклюдами ебля, он тоже сам не может справиться, надо в симейке дрочить что-то. А вот на питоне сходу написало рабочий код на qt. Можно дальше просить хотелки, тут я просто попросил иконку в трее с меню сделать. Ты не думай что оно тебе рабочий софт на тысячи строк может написать с нуля, только отдельные куски по реквестам, хоть какой-то контекст нужен нейронке.
image.png2 Кб, 311x82
296 3146002
Кто знает как focus terminal показать в панели как на скрине?
Я его убрал и третий час пытаюсь найти галочку
297 3146026
>>45667
Да. Rc не позволяет менять внутренние данные, а твой код требует изменяемой ссылки. Именно для этих случаев и существуют разные Cell'ы.
298 3146042
>>45924

>IDE вместо nvim`a

299 3146613
>>46002
А мог бы уже оформить исюйку.
300 3147304
>>46613
А можно было и тяночку оформить, вместо того чтобы с боровчекером ебаться
301 3147545
>>47304
Ннно ведь боровчекер лучше тяночьки!!!
302 3147892
Скачал RustRover. Дебаггер не встаёт на брейку внутри лямбды.

Вы ебанутые?
303 3148141
>>47892
Ну все, заканчивай обратно
304 3150166
>>48141
Вы как пишете на этом говне? Или это какой-то игрушечный язык? Типа ЛОГО?
305 3150236
306 3150297
>>50166
Нет
image560 Кб, 3648x1988
307 3150517
Сегодняшний дейлик на литкоде удивил меня тем, что в расте нет сортировки чисел с плавающей точкой. Пришлось изгаляться новым типом. Заодно попробовал оптимизировать с помощью unsafe-кода, но выигрыша это почти никакого не дало. Ну и самое смешное, что предыдущее рабоче-крестьянское решение, с коллекционирование и сортировкой долей заметно быстрее, хотя и жрёт в 10 раз больше памяти.
show.png2 Кб, 256x50
308 3150880
309 3151497
>>50880
Так я его и использовал, посмотри на скрин. Его можно применить в сортировке, но не для того чтобы помещать числа с плавающей точкой в кучу (BinaryHeap).
310 3151672
>>50517

> чисел с плавающей точкой.


> primes


Ору с индуса.
311 3151727
>>51672
К счастью, в Индии английский — второй официальный язык. Поэтому индус смог прочитать условие задачи и понять, что там нужно делить одно простое число на другое.
312 3151738
>>51727
Не нужно.
a/b > c/d iff da > bc for a,b,c,d > 0
313 3151759
>>51738
Прекрасное понимание школьной математики, только это никак не упрощает решение этой задачи. Всё равно придётся писать обёртку имплементирующую Ord, только не для f32, а для пары чисел.

Для простой сортировки можно использовать вместо total_cmp. Я правда не уверен, что это будет эффективнее на процессорах с FPU.
314 3151780
>>51727

> алгоритмические задачи


> делить


Ты ёбнулся? Никогда не используй плавающую точку если её нет в исходных данных.
315 3151794
>>51759

> не упрощает решение этой задачи.


Я тебе не просто ускорил хиндукод, а спас от ошибок. Ты ведь и не знаешь, что некоторые i32 равны после преобразования в f32.
316 3152010
>>51738
>>51794
А я нихуя непонил. Обесните анончики.
мимовкатун
317 3152112
>>51794
К данной задаче это никак не относится. Пиздец, просто невозможно предугадать к чему могут доебаться на дваче после твоего поста. Слишком много специалистов по всему.
318 3152134
>>51780
А ещё не надо умножать неизвестно что на неизвестно что. Угадай почему.
319 3152362
>>52134
С этим как раз понятно как работать, начиная от использования overflowing_mul, и заканчивая переходом в 64/128 бит.

А умение работать c проёбом точности обычно идёт с курсом по численным методам, где от тебя сразу спрашивают с какой точностью ты хочешь решить задачу.
image733 Кб, 2668x1770
320 3152413
>>52010
Хз, какое слово в спамлисте, пишу ответ скрином, спасибо абу, пошёл нахуй.

Ссылка на плейграунд: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=a30f9a25242197bc48ccf4e19cd07c1a
ownership.jpg109 Кб, 1252x1814
321 3152503
Мнения?
322 3152514
>>52413
Спасибо. Буду думоть. Разбираца.
>>52503
Годнота. Схоронил.
1612418775826.png75 Кб, 430x252
323 3152516
>>52503
Каждый раз проигрываю.
17100501909770.jpg32 Кб, 225x225
324 3152530
>>52516
Два оператора сравнения и сдвиг. Могли бы и в макрос обернуть.
325 3152550
>>52530
Возьми и оберни.
326 3153215
>>52530
Если вдруг появился тип Rc<RefCell<HashMap<&'a str, Matrix<f64, 4, 4>>>>>, то проще сделать алиас.
327 3153226
>>53215
Выводится будет алиас или вот эта лапша? В тех же крестах можно полностью скрыть тип, но тут наверняка будет всё так же эта срань.
328 3153292
>>53226
Лапша. Хотя может есть какая-то опция в раст-аналайзере. Просто не делай синтаксических ошибок, лмао.
329 3153636
Продолжаю сортировать числа с плавающей точкой. Вчерашний литкодовский дейлик был довольно сложный, решил его только сегодня. Ради интереса попробовал сделать сортировку пар целых чисел, вместо результата деления, как настоятельно "советовал" токсичный анонас выше. Было подозрение, что это может оказаться даже чуть медленнее из-за того, что на каждой итерации сортировки потребуются дополнительные вычисления, как и для вычисления итогового результата, но нет, в пределах погрешности результаты идентичны. Правда растовский total_cmp оказался нетривиальным (для меня) и тоже сравнивает целые числа, поэтому попробовал напрямую сравнивать f64, вот это точно вышло медленнее.
330 3153681
>>53636
емакс что-ли? мощно
331 3154652
Чтобы такого закодить на расте чтобы после этого меня сразу взяли на работу сеньором? Ядро линукса переписывать не буду.
332 3154681
>>54652
Свой window manager?
333 3154731
>>53636
А профилер что скажет?
>>54652
Перепиши Stockfish.
334 3154990
>>54731
Да хз, мне так глубоко лезть желания нет. Да и профайлер это больше про поиск медленной функции, а тут скорее надо сравнивать дизассемблер для разных вариантов.
image674 Кб, 1571x596
335 3159869
>>52516
То ли дело питон.
image156 Кб, 862x782
336 3160144
https://github.com/DioxusLabs/dioxus/

Пробовал эту штуку кто-нибудь? Вот прям можно для мобилок хоть счас норм аппликуху собрать?

самому некогда, иду по горам лазить
337 3160167
>>60144
Так это очередная веб-параша на вебвью. С таким же успехом можешь взять любой веб-гуй, хоть электрон. На расте уже есть несколько подобных высеров, каждый год новый появляется. Сейчас хеллоу-ворлд собрал, так же как и таури запускается с задержкой в секунду - идёт ебучая инициализация вебвью. Смешно видеть высеры про перфоманс, когда их говно запускается медленнее электрона.
338 3160505
Tauri или egui?
339 3160721
>>52503
База
340 3161651
>>60505
Бамп
341 3161680
>>52503
Шиз не освоил miro и решил захуярить схемку ascii графикой

По теме треда - реквестирую, что с Rust произошло хорошего в контексте промышленного применения за последние 4 года?

Где уже можно пользоваться, где сырое шо пиздец. Вчера на хабре наткнулся на нытье, что раст в gamedev - сырое недоразумение. Это так? А что в других сферах?
342 3161697
>>61680
Для дебилов стаковерфловнутых раст будет сырым недоразумением даже когда на нём космические корабли будут летать. Для нормальных людей всё уже давно хорошо и можно юзать деінде.
343 3161795
>>52503
а текстом скниешь?
344 3161847
>>61680
В вебе ещё как-то терпимо, всё остальное пиздец, да. Причём автобинды на сишные/крестовые либы - это лучшее что есть в расте.
345 3161959
>>61680

>Шиз не освоил miro


Нормальные люди юзают канвасы в обсидиане вместо этого поделия для вебмакак
image30 Кб, 1327x716
346 3162095
>>60167
Калькулятор и список подлинкованных либ. Получается, без этого зоопарка и не собрать. Но, блин, удобно же. Для мобилок его попробовать, штоле.
347 3163468
>>52503
Объясните разницу между Cell и RefCell. Я же правильно понимаю что когда они обёрнуты в Rc/Arc разницы по сути нет?
348 3163512
>>62095

>libxslt


Разве этой мразью еще пользуются? Пятнадцать лет назад ее пытались вкорячить в бэкенд, не вкорячилось.
349 3163566
>>63468
Содержимое Cell можно забрать только по значению, зато его не надо лочить. C Rc никак не связан.
350 3163973
>>63512
Это зависимость вебвьюхи гтк-шной.
351 3164162
>>63468
Разница есть. Cell::get() возвращает копию значения, RefCell::borrow() и borrow_mut() ссылки. Первое подходит для примитивных типов, которые и так обычно копируются, второе для всего остального. Если попробовать объяснить другими словами, то Cell используется, когда необходимо поменять "неизменяемое" значение примитивного типа (т.е. типа, реализующего трейт Copy), а RefCell, когда необходимо сделать проверки заимствования в рантайме, чтобы поменять "неизменяемое" содержимое какого-то значения. Обрати внимание, что есть разница между значением и содержимым.
image52 Кб, 499x488
352 3165182
Ууу, бля, ууу.
353 3165263
>>65182
Лол clion для свободных бесплатных православных сей и плюсов платный, а rustrover для корпоративного богомерзкого раста бесплатный.
То-то жопа у местного дурачка-антикорпораста подгорит.
354 3165331
>>62095
Зацените, аноны, как можно. Пиздец, конечно, они заморочились, но выглядит прям многообещающе.
355 3165336
>>65331
Забыл добавить - это дефолтный пример калькулятора, где все изменения я показал на скринах.
356 3165424
>>65331
Выглядит скорее как хуйня. На нормальных фреймворках гуя хоть на том же дотнете, на имгуи всё ещё примитивнее всё это сильно проще реализуется, без всяких костылей в строках и лапши.
357 3165618
>>65182

>системный язык


>надо пользовать иде


Пидорастики такие пидорастики.
358 3165632
>>65618

>> Загринтекстил чот


>> Загринтекстил чот не связанное


> Сделал тупонький манявывод


Хейтерки такие хейтерки
359 3165678
>>65182
Я пробовал этот кал пару недель назад и удалил. Даже вспомнить не могу почему снёс нахуй. Вреде бомбанул от уёбищной подсветки синтаксиса, хуже чем в вскоде.
360 3165891
>>65424
Да лан? Ну покажи. Вкратце задача - по клику по кнопке в некой группе переопределять надписи и значения всех кнопок из группы, в идеале как у меня в примере - перетрясыванием набора исходных значений (у меня это shuffle).

Собсно у меня есть задача, где надо будет реализовать нечто подобное. Изначально хотел cursive, но там пиздец, потом egui, но там немногим легче. А тут прям самое то.
361 3168049
Свидетели векторизующихся итераторов в треде есть?
Почему так? Хочу разобраться.
1704033386622.png410 Кб, 2799x1319
362 3168070
>>68049
В расте всё очень плохо с этим, оно в зачаточной стадии находится. Странно ожидать от веб-параши производительности в итеративных вычислениях.
1628435076086.png77 Кб, 1302x375
363 3168154
>>65891
С imgui будет пикрилейтед. Не надо никаких лямбд, не надо никаких полей и лапши в строках.
364 3168555
Cап, сейчас кожу на питоне, думаю перекатиться в раст как более перспективный язык на рынке труда
Поясните нормальное решение? Стоит также дрочить алгоритмы на расте или у вас другие паттерны?
В целом раст сильно сложнее?
Не обзывайте пожалуйста
365 3168557
>>68154
Вот и хорошо, вот и замечательно. Думаю, на egui похожим образом можно сделать.
Зато тут стили, кроссплатформенность и, что для меня важно, реактивность через их этот Signal, который можно шарить между тредами.
366 3168565
>>68555

>как более перспективный язык на рынке труда


Смотря что кодишь. Если машоб/нейронки, то как бы mojo не оказался более перспективным. Если бэк, то goвно явно перспективнее. Самый перспективный способ получить деньги за работу на расте сейчас - это самому внедрить его на текущей работке. Типа, есть какая-то задача, которая реализована бажно и тормознуто на пыхе/петухоне, ты за выходные переписываешь её на раст и презентуешь барину. Барин ссыт кипятком от такой скорости и стабильности, повышает тебе ЗП, ты докидываешь абзац в резюме - который тоже не факт, что пригодится.
367 3168577
>>68565

>переписываешь её на раст и презентуешь барину.


А потом просишь повысить зп еще, потому что тебе на замену он никого не найдет
368 3168586
>>68557

> Зато тут стили, кроссплатформенность


Да и на imgui всё это есть. У egui ещё производительность такая себе, я недавно чекал его в очередной раз и довольно грустно для десктопного гуя. У imgui хотя бы на уровне qt производительность.
Можешь посмотреть какие ебанутые комбайны можно на нём делать:
https://github.com/WerWolv/ImHex
369 3168730
>>65182
нахуй ты местных нищуков так пугаешь? там бесплатно для некоммерческого использования
370 3168731
>>52413
конвенциональных?
371 3168732
>>68731
не угадал :(
image47 Кб, 1281x625
372 3168782
>>68586
Да лан, мне и на диоксусе збс.
Поясню, почему: в моей задаче гуй не самое важное, лишь бы было удобно работать с условным бэком - диоксус это могёт. Параллельно хотелось бы
а. Оставаться в экосистеме раста (хотя бы затем, чтобы прям из ide смотреть код сторонней функции)
б. Изучить что-то новое, потенциально годное для портфолио - реактивные гуи на DOM+CSS я ещё не делал, теперь вот поделаю.
image.png308 Кб, 591x1280
373 3169269
image30 Кб, 679x744
374 3169362
image99 Кб, 679x744
375 3169364
>>69269
>>69362
GPT у меня сейчас стоит на промо-4о, жалко тратить
376 3169380
>>69269
Я даже не знаю, смеяться или плакать над тем, что слабоумный консерватор не в курсе того, что вместо твиттера теперь Х -- прибежище наиболее слабоумных консерваторов.
377 3169410
>>69380
Слабоумные либералы в твиттере, слабоумные консерваторы в X
Kojikaep01010.jpg173 Кб, 1280x720
378 3169449
>>69269
Отвечает прям как типичный пидорастер.
Наверное язык/система программирования соответствует мышлению определенной категории людей.

Проще говоря язык от либерах для либерах.
С ценрализованной инфраструктурой, надзором от большого брата и с изменчивой семантикой чтоб никакое пропитое быдло грязными мазутными руками не могло разобраться в замысловатом творческом коде господина пидорастера.
379 3169452
>>69449

> *пропитый быдло-технарь

380 3169464
>>69449

>С ценрализованной инфраструктурой


то ли дело, есть 3-4 слабо совместимых между сбой компилятора, а нужные либы надо гуглить. И потом ебаться долгими вечерами, прилаживаю одно к другому, ммм...
381 3169492
>>69449
Да, я тоже удивлен, что выдача гопоты не отличается от стокового члена RUSTCEAN. Может быть, все это и не люди пишут?
17099921125010.jpg1,4 Мб, 1800x2400
382 3169603
>>69464

>то ли дело, есть 3-4 слабо совместимых между сбой компилятора, а нужные либы надо гуглить


В карге лежат "либы" уровня tinyxml2 это влучшем случае, а в типичном уровня leftpad. То есть то что в нормальном мире либами и не считается, считается модулями.субмодулями.

Либы это libsdl libtorrent libopenssl libgtk3

Что касается несовместимости то это надо спрашивать у ллвм/шланг почему он изобрел велосипед с квадратными колесами, а не взял уже готовый Gimple на котором написаны фронтенды для гцц. Хотя я знаю ответ - авторы хотели и рыбку съесть и на хуй присесть запилить компилятор который и как HOT и как JIT работает, со вторым в итоге пососали хуев и теперь мы имеем странный компилятор который переводит языки в байткод (LLVM IR) который прожевывает аки виртуальная машина и выпукивает машинный код.
383 3169776
>>69603
В карге всё есть, не пизди.

>Либы это


>libsdl


wgpu/winit

>libtorrent


тут +- . при желании можно состряпать rust-only клиент на том, что есть, но пусть будет минус, хуй с тобой

>libopenssl


rustls заменяет openssl почти во всех крейтах, где нужно шифрование

>libgtk3


Прямо сейчас полно замен, если не требуется писать именно gtk/qt
Из последнего https://github.com/lapce/floem и https://github.com/audulus/rui - стильно, модно, реактивно.
384 3169960
>>69776
В плюсах например есть библиотека lodepng это примерно такая же small+fast библиотека-модуль которая легко подключается к проекту и собирается с ним, но это не замена всяким libpng, libjpeg-turbo итд. она не умеет в разность бит на цвет и не умеет в полный стандарт, не имеет симд и опенмп для обработки больших данных.

А ты предлагаешь трехколесные велосипеды в качестве альтернативы квадроциклу, вот поэтому раст и сосет.
385 3170008
>>69960
Используй биндинги, ноу проблем. Вообще, конкретно эта предъява к расту очень легко применима к любому другому языку не из мира C/C++ , причём в гораздо большей степени.
Если взять и посравнивать, то окажется, что по количеству либ, написанных на нём самом, раст всасывает разве что жабе/шарпу. А из компилируемых языков он вообще первый - это я говорю про вне С/С++ тусовочки, напомню.

Тогда уже говно-языки hare/zig/ocaml/fortran/nim/crystal/elixir/jai/mojo/.. - на них ведь тоже без биндингов к сям далеко не уедешь.
386 3170053
>>70008

>Используй биндинги, ноу проблем.


Ну да, когда растобляди переписали свою альтернативу, то дыряшка сразу не нужна, но когда чего-то не хватает, то обертки из швятого растокода над сишной либой - это не зашквар.

>Тогда уже говно-языки


>zig


Лол, что? Некоторые уже сишный код собирают через zic cc, да и в целом нет ни одного языка, где существовала бы такая легкая интеграция с кодовой базой на Си(ну кроме самого си).
387 3170109
>>70053

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


>когда чего-то не хватает, то обертки из швятого растокода над сишной либой - это не зашквар


Не вижу тут противоречия, но вижу скулёж брошенки.

>Некоторые уже сишный код собирают через zic cc


От этого сишный код не становится зиганутым кодом, зато появляется мешанина, написанная хуй пойми на чём. Вообще, этого говна, совместимого с обычной сишкой, было уже немало и ничем оно принципиально не выделялось, разве что добавляло немного сахарку. Те же обж-си, ди, ним.
388 3170116
>>70053
Зиг - это буквально "Хедеры - эта сложнааа", он ни одной проблемы не решает.
389 3170128
>>70116
Там ваш фанбой, который учил вас расту на ютубе, устал от него и полюбил зиг
https://www.youtube.com/watch?v=NAOOGB1q6uQ
390 3170141
>>70128
Я и сам не прочь перекатиться, но на что-то типа mojo, когда его допилят. Сейчас там даже тулинг развернуть - уже изрядно поебаться и не на всяком линухе работает при этом.
А zig в своей нише низкоуровневого байтоёбства пускай и ошивается, я не против.
391 3170169
>>70109

>Не вижу тут противоречия, но вижу скулёж брошенки.


А оно есть, и заключается в двойных стандартах шлюх.

>От этого сишный код не становится зиганутым кодом, зато появляется мешанина, написанная хуй пойми на чём


Сам придумал, сам оспорил? Никто и не говорил, что Си код превращается к код на зиге(хотя и такая функция есть), а говорилось лишь то, что зиг работает с кодовой базой на Си почти бесшовно, что увеличивает комфорт системной разработки в разы.

>>70116

>он ни одной проблемы не решает.


Решает, и это видно по сообществу языка, куда приходят байтоебы, ибо видят в нем настоящую замену Си, а не веб макаки/питонобляди, которые в очередной раз пишут свою парашу. Удивительно, что язык, имеющий версию 0.12.0, подходит для системной разработки больше, чем "убийца си", который не один десяток лет пилится.

>>70141

>Я и сам не прочь перекатиться, но на что-то типа mojo, когда его допилят.


Вот вся суть шлюх, т.е. беготня за current thing ради бытия в ТУСОВОЧКЕ. ИРЛ их нормальные люди обоссывают, поэтому приходится свою социальную жизнь и самовыражение в профессиональную область выносить.

>>А zig в своей нише низкоуровневого байтоёбства пускай и ошивается, я не против


Ну да, ведь раст же не для этого создавался.
392 3170177
>>70128
zig - это апофеоз линуксоидов-пердоль. Там есть сомнительные фичи, добеленные просто потому что так Андрюха решил. А есть куча фич, которые забракованы по надуманным причинам. Всё что не free по мнению гну-пидорасов - там под запретом, баги не фиксятся и откладываются на несколько релизов вперёд т.е. на годы как некритичные. Разрабы по большей части заняты не непосредственно языком/компилятором и улучшением юзерэкспириенса, а какой-то хуитой типа написания никому ненужных либ под MIPS и переписыванием сишного кода. Сборка чего-то сложнее хеллоу ворлда - кал собаки, надо литералли на любой пук писать "скрипты" сборки на самом зиге. Чего только стоит их "более удобный компилятор крестов", где вместо трёх строчек симейка надо написать портянку на зиге. При том что он ещё даже до хоть какого-то рабочего состояния не дошёл, а уже есть куча легаси либ, в том числе легаси документации и инфы из гугла, которая иногда только путает, т.к. сейчас уже поменяли некоторые места. Либ нет, а биндинги на сишные либы пишут руками и они везде неполные. Производительность сосёт, и у крестов, и у раста. У них написано "Call any function at compile-time", но это пиздёж и все компайл-тайм вычисления даже у крестового constexpr отсасывают по итоговой оптимизации. Можно бесконечно перечислять всё говно зига, по факту даже D на текущий момент более пригоден для кодинга, чем зиг.
393 3170183
>>70169

>видно по сообществу языка, куда приходят байтоебы,


>Ну да, ведь раст же не для этого создавался.


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

>беготня за current thing ради бытия в ТУСОВОЧКЕ


ну не совсем. То, что я перейду именно на mojo, это громко сказано, сперва пощупаю. Но и на раст я перешёл с питона, когда устал от его тормозов, gil и отсутствия типов. mojo пытается быть чуть более дружелюбным растом с питонячьим синтаксисом - сама идея мне норм.
394 3170219
>>70183
При этом какие ошибки в движке лисы были такие и остались.
Например джаваскрипт запущеный на странице из контекста расширения не производит никаких сообщений в консоль.

В хромом все это работает, но хромой сразу создавался с песочницей и многопотоком, а лиса обрастала им постепенно и там код из костылей, от которых они не хотят избавляться но хотят переписать их на что то более внятное что бы проще было поддерживать, но вот справляется с этой задачей раст это большой вопрос, где то читал жалобы какого то дяди из мозилы что в коде стало еще тяжелее разбираться, плюс сам фаирфокс из браузера который легко собирается на чем угодно, превратился в браузер который работает только на тех которые поддерживаются ллвм+растом (то есть китайские мипсы и эльбрус в пролете).
395 3170260
>>70219
Сейчас довольно небольшая доля лисы написана на расте. И раст не защищает от логических ошибок и эффективных манагеров.

>хромой


Давно под нами.
https://source.chromium.org/search?q=file:Cargo.toml&ss=chromium&start=51
396 3170278
>>70260

> third_party


> Давно под нами.


Кто вы? Ты один тут, поехавший.
397 3170284
>>70278
Да лан, лиха беда начало. А ещё вот так посмотри
https://source.chromium.org/search?q=file:%5C.rs$%20-third_party&ss=chromium&start=1
398 3171206
>>70219

> превратился в браузер который работает только на тех которые поддерживаются ллвм+растом (то есть китайские мипсы и эльбрус в пролете).



Может это и была цель? Лешить конкурирующие платформы свободного браузера?
399 3171282
>>71206

>конкурирующие платформы


>эльбрус



Лемао
400 3171374
>>71206
Да нет, просто мозилой руководят лгбт пидорасы подсаженые гуглом. Мобильный браузер изговняли и фактически уничтожели, на слабом интернете он просто не открывает страницы, а свое собственное расширение я никак не могу поставить потому что оно не рекомендовано пидерастами-проверяющими.
Сижу на старом где пока еще можно на аддоны зайти и поставить тот же AudioOnly for YT

На десктопе тоже работа кипит, надо сделать так что бы у лисы не осталось никаких преимуществ перед хромокалом, вот ребята и стараются. Скоро платформонезависимый интерпритатор на плюсах выкинут чтоб нельзя было без портирования jit обойтись, а на хромом запилят.
401 3171434
>>71374
Дружеское напоминание: за 99% закрученных в мире гаек ответственны традиционалисты-натуралы.
Готов спорить на деньги что мозилой руководят правопопулистские бумеры-натурасты.
402 3171518
>>71434

>Дружеское напоминание: за 99% закрученных в мире гаек ответственны


Во первых политики свою личную жизнь обычно не афишируют и какие они на самом деле ты не можешь знать. Католические попы в свое время тоже рьяно за целомудрие и нравственность боролись и надевали мальчикам железные клетки на хуи.

А во вторых речь кок раз про бестолковые креативные изменения.Кроме того один из директоров там точно сжв пидарок https://blog.mozilla.org/careers/pridezilla-a-resource-group-for-lgbtqia-mozillians-and-allies/
403 3172043
>>25439 (OP)
чо есть игровые дивжки или фреймворки с растом?

и чо по вакансиям? нихуя нет, я угадал?
405 3172296
>>72114
ебать, а чо там в игре лаги такие?
они ее в жс что ли конпелировали чи шо
406 3172338
407 3172991

>wc -l cargo.lock


>9750


Ебанутые, блядь, пориджи. Добро пожаловать в мир нпм.
408 3172995
>>72991
Как мне жить с этой хуйнёй, если дома нет инторнета? Можно как-то, как в линупсе с сишечкой собрать либы и подпихнуть бинари для конпелятора?
409 3173122
>>72991
А еще удачи проверить сотни писькопакетов, которые рекурсивно тянутся к твоим зависимостям)
Безопасный язык для системной разработки, хули.
410 3173138
>>72995
Попроси своего парня нарезать двд со слепком crates.io, потом по инструкции поднимешь локальную репу.
411 3173157
>>72991
а у сиблядей по другому что ли? я тут QEMU на днях собирал из исходников - аналогично туева куча пидорских зависимостей

потратил минут десять, чтобы понять, что ему нужен python3-setuptools (сначала грешил на версию петухония)
412 3173202
>>72995

>Как мне жить с этой хуйнёй, если дома нет инторнета?


Ну возьми поплачь
413 3173205
>>73157
Блядь, просто пакеты ставишь, автоконф скрипты допирают, чего не хватает, 99.99% конпеляций работает с первого захода.
414 3173212
>>73205
а если пакеты нужны разных версий? в т.ч. версий, которые уже не поддерживаются и которые не найти?
415 3173222
>>73212
Высосал из жопы проблему.
416 3173237
>>73222

>>wc -l cargo.lock


>>9750


>Ебанутые, блядь, пориджи. Добро пожаловать в мир нпм.



>Высосал из жопы проблему.

417 3173242
>>73237
Поридж ёбаный, у меня в си под линуксом таких проблем нет в 99% случаев.
418 3173245
>>73242
УМВР 99%
плохо, надо дотянуть до сотки хотя бы
419 3173248
>>73245
Да заебись, надо постоянно качать ВСЕ нахуй исходники, ебанутые суки.
420 3173262
>>73248
почему постоянно? оно ж кэшируется, раз скачал и оно лежит себе у тебя на жестком диске. смекаешь?

папку target в проекте снес и оно снова все скачает при компиляции проекта
421 3173288
>>73262
У меня где-то 60 гигов весили в сумме проекты с растопарашей.
422 3173321
>>72991
Дедуля со своими два ядра два гига и adsl модемом хули ты тут забыл? Пиздуй в одноклассники
423 3173340
>>73321

>ADSL


>модем


а ты сам откуда такие аббревиатуры и слова знаешь? может тебе самому в одноклассники пиздовать надо?
424 3173457
Раст и безопасные уязвимости.
https://www.youtube.com/watch?v=r0rocq3w5CU
425 3173467
>>73288
Вот да, это пиздец.
Обоссаное консольное приложение 4гб исходников+объектных файлов.

В целом язык очень нишевый, точно не десктопный ибо не нужон ваш ffmpeg/wxWidgets скоро на расте велосипед подъедет, а скрипты и luajit вообще выкиньте, пишите на расте и радуйтесь звучит как аргумент из дурки. Может быть серверные веб приложения вот это все где сейчас джава доминирует, нода как раз не шмагла по перфомансным причинам.
426 3173475
>>73457

> что то связанное с символами экранирования.


Майкрософту пора принять решение и отказаться шиндоус путей
просто перейти на юникс/позикс-гибрид как мак и все.
Давно бы уже могли это сделатьб я уверен они сами уже наелись говна с этими спецсимволами и кодировками.
427 3173842
>>73467
Раст, это язык от программистов для программистов. А программисту нужно что? Контроль. А для контроля нам надо, чтобы всё од рукой. Вот о дефолту там и идёт куча дебажных символов и проч. Релизную сборку делаешь по инструкции https://github.com/johnthagen/min-sized-rust и будет тебе щастье
428 3174075
>>73842

>это язык от программистов для программистов. А программисту нужно что? Контроль.


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

Обычно языки создают люди с академическим образованием и мышлением,
основывая их на законах и постулатах-парадигмах, поэтому обычно в них таких проблем нет.
429 3174129
>>74075
Попробуй аду и хачкель. С ады я вообще охуел, насколько там всё неудобно. Зато академично, что ниибаца.
430 3174216
>>73842

> будет тебе щастье


Под виндой чтоб опуститься ниже 100 кб только no_std врубать. Хоть обосрись, но голый main даже без использования std сожрёт 100+ кб, lto делает ровно нихуя.
Алсо, с контролем в расте как раз всё очень плохо. Иногда ощущается что ограничений больше чем в питоныче.
431 3174227
>>74075

> Обычно языки создают люди с академическим образованием и мышлением, основывая их на законах и постулатах-парадигмах


Ну вот макаки придумали ООП, там явно мышление не участвовало в процессе созидания. Мартин SOLID придумал, но за 20 лет никто так и не смог чётко сформулировать что это такое, все по разному объясняют значение этих пяти букв. Хотя там уже первая буква - целый мем, определяющий всё легаси-говно.
432 3174232
>>74216

>Иногда ощущается что ограничений больше чем в питоныче.


врубай ансейф и вперёд.
433 3174241
Хочу написать свой докер/кубер/хелм и рубать мильярды, ваше говно для этого подойдёт?
434 3174245
>>74241
Пиши на петоне. Это люди небольшого ума придумали писать инфраструктурные вещи на комплируемом языке.
17105760317180.jpg36 Кб, 320x320
435 3174255
>>74129

> ада


> академично


Сорт военно-инженерной академии
436 3174257
>>74245
Объясни как рубисту, неужели нет преимущества у написания инфраструктурной хренотени на гошечке или расте? В вебе мне понятно, ты упрешься в пропускную способность намного раньше процессорного времени, а тут во что?
437 3174259
>>74257
В количество сервисов, которые надо запустить.
438 3174263
>>74259
Разумно, спасибо. Для чего тогда раст? Что на нем пишут вообще в повседневности?
439 3174270
>>74259
Так сами сервисы могут быть на чем угодно, в том числе и на расте и на говоланге. Но зачем скедулер для этих сервисов на голанге? Особенно если ты не клауд провайдер.
440 3174282
>>74232
Ансейф не спасёт от боровчекера и типов.
441 3174313
>>74263
Серверы, базы данных, рендереры, криптобиржы
442 3174360
>>74257

>нет преимущества у написания инфраструктурной хренотени на гошечке или расте?


Чувак, ты про вообще? Вся инфраструктурная хренотень написана на go. Docker написан на go. ArgoCD написан на go. Kubernetes написан на go. Istio написан на go. Helm написан на go. Prometheus написан на go. Ну и так далее.
443 3174369
>>74360
Так где тут преимущества? Один дебил начал, другие за ним стали повторять...
444 3174455
>>74360
Я знаю, что оно на го всё написано. Я пришёл в чат растеров, узнать, подходит ли их язык для такого, просто в рамках своего личного исследования его применимости, которое я провожу перед тем, как решить, стоит ли ковыряться в расте или возвращаться к котлину, который мне поможет по работе, но к которому душа не лежит. Или вот всё бросить и дрочить го. Я вообще из веба/руби/питона, для меня это всё чужое и непонятное, а тут вон чувак говорит, что инфраструктурные штуки, которые мне нравятся, проще на питоне писать. Я и спрашиваю, какого хуя.
445 3174478
>>73321
Ну так пишите на джавахуйне тогда хули вы лезете блядь.
>>73842

>А программисту нужно что? Контроль


Ну так на си пишите хули.
>>74263
Криптопараша на расте.
>>74455
Раст тебе нахуй не нужон на самом деле, если ты приходишь в чат с вопросом для чего раст.
446 3174514
>>74478
Спасебо
447 3174544
>>74360
Эластик написан на джаве, Логстэш написан на джаве, ДинамоДБ - джава, Кафка - джава, Рэббит - она же, Дженкинс - тоже
Ява теперь неебаться крутой язык для инфраструктуры оказывается
448 3174563
>>73288
К слову, так было пару лет, когда я на растопараше писал, сейчас похоже всё не так, карга пакеты вроде в .cargo складывает и появилась какая-то хрень - локальная registry. Алсо, если учитывать, что раньше всё собиралось из исходников, потому что АБИ был нестабильным, то выходит они до сих пор аби не стабилизировали?
449 3174671
>>74227
ООП это программирование в парадигме объектов, их свойств и их методов.
У тех кто его понимает не возникает вопросов "что это такое".
450 3177665
>>74227
ООП дало возможность пачке макак работать над одним проектом не мешая друг другу.

Старая шутка про - один программист может написать программу за месяц, а двое туже программу за два месяца - была актуально именно над процедурными языками.
Контракты и инкапсуляция, позволяет не наступать друг другу на пятки, а IoC дало еще возможность это тестировать.

То что эволюция пошла взад, виноваты педерасты.
451 3177755
>>77665
Проблема в том что этих макак эволюция обошла стороной. ООП хоть и задумывался как помощь братьям нашим меньшим, но так и остался инструкцией для умственно отсталых.
452 3178461

> let image = DynamicImage::from_decoder(PngDecoder::new(&sum[..]).unwrap()).unwrap();



Есть такая строчка. В &sum[..] лежит исходники картинки. С image все ОК, с ним можно работать (кропать, сохранять на диск и т.д.).

Вопрос: как сделать обратное - из image получить sum[..]. Всякие as_bytes не дают желаемого. Нужно именно кодировать обратно.

Использую image = "0.24.6"
454 3178642
>>78461

>Нужно именно кодировать обратно.


Ну так и поищи по слову encode в документации. Там же сразу по этому слову найходитя write_to() и write_with_encoder().
455 3178686
Хочу с перла перекатиться, уже совсем неживой язык. И бек писать. Лучше го или раст? Вроде один простой, второй интересный
456 3178693
>>78686
Выбирай go
К тому времени когда станет уже неинтересно, у тебя по крайней мере будет работа
457 3178863
>>77665

>Контракты


>инкапсуляция


>IoC


В итоге додики сували это всюду и везде, получилось больше во вред.
>>78686
Один язык для написания библиотек и криптопараши, второй для бэка/всякой сетевой 🌶нюшки, какое тут "или"?
458 3179024
>>78522
>>78642
Спасибо, тогда вопрос такой.

>let mut arr = [0u8; 400000];


>let buffer = BufWriter::new(arr.as_mut()); >image.write_with_encoder(PngEncoder::new(buffer)).expect("TODO: panic message");



Нужен фиксированный размер arr. Если указать маленький, то выдаст failed to write the buffered data. Если поставить заведомо больше, то failed to write whole buffer. Вычислить необходимый размер arr не получается. Можно ли как-нибудь сделать BufWriter динамического размера.

В валидности конструкции не уверен, подглядел на stackoverflow.
алгоритмы на расте.mp41,4 Мб, mp4,
640x360, 0:43
459 3179043
Коллеги, жизненно?
460 3179117
>>79024
Сделай буфер вектором, а не массивом, оберни его в BufWriter и передавай так в DynamicImage. Ты же сам по русски написал что тебе надо, остаётся просто перевести это в термины раста.
461 3179194
>>79043
Дети, которых не учили расту, а учили плюсам и паскалю, не могут что-то сделать на расте. Шок, сенсация.
462 3179205
>>79117
друг мой любезный, если бы все было так просто, я бы тут не спрашивал
обернуть в BufWriter можно только типы Sized
463 3179210
>>79205

> ебётся с несовместимыми типами


Добро пожаловать в раст, так будет всегда.
464 3179213
>>79024
>>79117
>>79205
>>79210
Ладно, к своему стыду получилось сделать так:

>let mut arr = vec![];


>let _ = image.write_with_encoder(PngEncoder::new(&mut arr)).expect("TODO: panic message");



Но правда один 🌶 после encoder != до decoder
465 3179222
>>79205
Вектор имплементирует Write:
https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-Write-for-Vec<u8,+A>

Твоему PngEncoder'у нужен контейнер, имплементирующий Write:
https://docs.rs/image/latest/image/codecs/png/struct.PngEncoder.html#method.new

Просто передай туда мутабельную ссылку на вектор, буфер не нужен, меня наебал комментарий в описании библиотеки.
466 3179226
>>79213
А, ты уже сам догадался.

У PNG есть параметры компрессии, они возможно не совпадают.
467 3179326
>>79043
https://www.youtube.com/watch?v=o111yYPqLHU

таймкод лень искать
патлатый даун (книжки пишет и преподает в какой-то параше) там говорит, что студентик нынче туповатый пошел и такую вещь как указатель впринципе понять не способен из-за физических ограничений мозга
468 3179391
>>79326

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


Как будто раньше студентик понимал, и поэтому вызывал маллок по поводу и без. Наверное потому что ему вот такие бородатые клованы рассказывали про поинтеры, но не рассказали про то как работают комплюктеры.
469 3179410
>>79391
>>79326
Я хз как можно не понять концепцию указателей. Сейчас речь идет не о сложных кейсах, когда происходит каша из указателей на массив указателей на указатели на функцию и т.д, а о самых примитивных случаях, которые преподают в ВУЗике.
Если студент не в состоянии осилить такую простейшую абстракцию, то о чем речь? Он и остальные абстракции не поймет.
470 3179458
>>79043
Есть такое. По прежнему говорю, раст не сложный в обучении, он неудобный для меня.
471 3179466
>>79326
Ой да ладно, очередное раньше было лучше, раньше были умнее. Это в 90е С++ был основой для всего, а сейчас область си настолько сузилась, что это ваше системное программирование нафиг не мотивирует никого, вот люди с трудом жуют.

Запомните, ошибка в обучение лежит на преподавателе, его способности мотивировать и обучать. Вот и представьте компетентность этих людей.
473 3179472
>>79469
Ну к Столярову я бы с опасением относился, учитывая какие пассажи он прогоняет и тот факт, что он нихрена не работал в индустрии.
Самые полезными и толковыми преподами в универе были чуваки с многолетним опытом в индустрии(писатели телекоммуникационных систем, например), а не академические крысы.
474 3179591
>>79410

>в 90е С++ был основой для всего


Зумерок, спок.

>а сейчас область си настолько сузилась,


У зумерка с++ = си

>Запомните


Ещё и учит кого-то, 🍑ц.
475 3179598
>>79210
В свое время дропнул паскаль из за этого. Не язык, а какой-то надзиратель хватающий тебя за загривок и окунающий в бочку с водой, потом вытаскивающий и орущий в ухо: "ДЕЛАЙ КАК Я СКАЗАЛ, САЛАГА! ДУХ! ЧЕРВЬ!", снова окунающий, снова орущий и так постоянно. Какое же мерзкое душнилово, и это при том, что паскаль позволяет свободно в указатели и даже ассемблер. А тут 30 лет спустя изобрели такую же залупу "руст", только в десятки раз хуже, и еще находятся особо одаренные это нахваливающие. Я бы к такому выродку не подошел на пушечный выстрел, это уже за пределами любой деградации, литеральные черви, не люди.
476 3179664
>>79410

>Я хз как можно не понять концепцию указателей.


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

Сам по себе указатель это просто метка для подстановки комманд лоад/стор, самая важная часть в указателе это размер данных к которым ты по нему обращаешься (то есть тип). Если супер-программизт нахуевертил гигаструктуру не особо заботясь о размерах сегментов и расположении данных, то хули толку понимать поинтеры.

Еще хуже обстоит дело с executable поинтерами, еще на заре взлета Си будущие бородатые деды с терминалами понимали что это хуевая затея и ей не место в языках высокого уровня, поэтому изобрели ООП у которого в памяти создается объект с которым ассоциированы функции через метоинформацию. Не нужны больше статики и функшн поинтеры казалось бы, но пришла асинхронщина с лямбдой в калбеке и сказала объектам подвинутся.
477 3179808
>>79664

>поэтому изобрели ООП у которого в памяти создается объект с которым ассоциированы функции через метоинформацию.



То есть, через vtable.
478 3179886
>>79664

>но пришла асинхронщина с лямбдой


Это уже не си, а высокоуровневый абстрактный кал который вон чел в видео выше называет "не-фоннеймановским" программированием, наравне с лиспом и прочими хаскелами/растами, короче соевые выебоны. Да, соя была издавна, тот же лисп, но тогда она была малоизвестной нишей.
479 3179991
>>79664

>концепция языка Си это абстрактный от архитектур визуальный ассемблер


Называть си ассемблером я бы не стал. Компилятор может переставлять и выкидывать строки как ему вздумается. Ради интереса открыл сейчас ISO/IEC 9899:2018, там 10 страниц (408-418) с перечислением Undefined Behavior. Все UB — это картбланш компилятору на любую оптимизацию.
480 3180029
>>79991

> Компилятор может переставлять и выкидывать строки как ему вздумается


Как и CPU, лол. Учи модели памяти чтобы не быть батхёртом.
481 3180055
>>80029

>Ваш ассемблер не ассемблер.


Ясно всё с тобой. Иди со своей казуистикой в /b/, там все твои друзья.
482 3180072
>>80055
Ну так-то он прав, в x86 инструкции могут не в порядке машинного кода выполняться и даже одновременно в одном такте, если соблюдаются условия для этого.
483 3180093
>>80072
Так я что, спорю что-ли? Какое отношение это имеет к моему утверждению, что си и ассемблер это разные вещи?
484 3180107
>>79991

>Все UB — это картбланш компилятору на любую оптимизацию.


Не совсем. Компилятор всегда оптимизирует с позиции что UB недостижим. Т.е. если у тебя есть if (foo) bar() else UB, компилятор это cоптимизирует до bar().

Оптимизации работают с позиции что разработчик проверил что все возможные входные значения не приводят к UB, а значит возможные значения которые триггерят UB можно не учитывать при оптимизациях.
485 3180148
>>79591
Да не трясись ты так, Столяров.
486 3180152
>>80072
Ещё про чтение и запись в память через кэши, с их протоколом когерентности, из-за которого некоторые изменения до памяти вообще не доходят.
487 3180273
>>79808
Вообще я говорил про вот такое:
myStruct->callback = &my_function;
хmyStruct->callback();
То есть указатель не просто с адресом функции которую надо вызвать, а прыжок в конкретное место на стеке со статик локалами.

А vtable это просто vtable[][] = { {"funct_name", virtual_call1}, ... }
И нужны они только для виртуальных методов, для которых заранее неизвестно какой вариант надо вызывать.

>>79886
Он шизик и гик, не слушай его.
Большинство кода на Си работают как раз не на фоннемоновских архитектурах, потому что все остальные языки предполагают что у нас безграничная куча памяти, как дедушка фоннейман завещал.
И возможно как раз тот самый вызов подпрограммы по указателю на нефоннемоновских архитектурах выглядит не так уж 🍑цово, микроконтроллеры не запускают программ извне и память у них набортная без всяких mmu.

>>79991

>Компилятор может переставлять и выкидывать строки как ему вздумается.


Не совсем понял как это относится к разговору, yj да в компиляторе есть агрессивные оптимизации которые могут сломать программу, обычно в документации указано какие именно, например проигнорировать NaN INF и прочую математическую хуету или сосчитать результат заранее и вместо вызова подставить результат.
А вот есть ли оптимизации заставляющие выкинуть обращения по указателю, которые расставил по коду нерадивый программист я не уверен.
488 3180290
>>80273

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


Компилятор делает много оптимизаций на вычислении границ возможных значений. Если он увидит что в какой-то указатель на функцию запись делается всего в одном месте и одной функции, он может сделать везде прямой вызов этой функции.
489 3180388
В Rust есть некий "конструктор парсеров"?) Чтобы парсер не с нуля писать, а из готовых шаблонов, если готового в природе нет.
490 3180396
491 3180413
>>80290
Компилятор не делает никаких оптимизаций, пока ты их не включишь. Тем более агрессивные с выкидыванием оригинального и подстановкой оптимального.

И в абсолютно любом случае он очень ограничен в ситуациях когда неизвестно на какую область памяти будет смотреть тот или иной указатель, ведь на этапе компиляции ее просто нет.
Поэтому и нужны всякие метки вроде restrict
492 3180432
>>80388
Тестовое делаешь?
493 3180433
>>80413

> неизвестно на какую область памяти будет смотреть тот или иной указатель


Самое смешное что именно компиляторописатели придумали dangling pointer, про который ни слова не писали в стандарте и только в недавних версиях добавили. Авторы стандартов не предполагали что UB для компиляторов станет форточкой, через которую будут протаскивать пианино, в попытках оптимизировать всё на грани поломки кода. И старая сишка не была такой опасной, отстреливающей жопу при неверном движении с О2.
494 3180435
>>80396

>after 3 years


типичный неосилятор
495 3180436
>>80396
Я тут ковырнул одну мелкоигру на анриале4 и просто охуел с того сколько оно все весит (400мб) и как медленно работает на моем древнекомпе.

Там реально внутри какой то скриптовый язык походу с интерпритатором обмазаный плюсовыми библиотеками для работы с графикой и вот этим всем. Наверняка на лету из строки клепает шейдеры и компилирует.

А потом всякие клованы нихуя не понимающие заявляют что надо с юнити на анриал тарков или WOT с плюсового дагора переписать и будет заебись.
496 3180439
>>80432
нет, pet-проект)
а пачиму вы спрашиваете?)
497 3180449
498 3180454
>>80388
Есть... этот как его... gobble https://docs.rs/gobble/latest/gobble/
499 3180491
>>80396
Судя по комментам, эта статья вызвала всплеск антологичных эмоций у людей работающих в той же области. Гейдев на расте - все.
image573 Кб, 3648x1988
500 3180604
>>80413
>>80433
Компилятор без оптимизаций никто не использует.

Другое дело, что не всё так страшно на самом деле и компиляторписатели не делают всё возможно ради оптимизаций. Вот пример. Я конечно может в нём ошибаюсь, но по-моему компилятор мог смело выкинуть в нём строку, печатающую 'Hello', потому что условие приводящую к её выполнению является UB.
501 3180618
>>80604

> никто не использует


Я помню в нулевых, когда gcc пытался косплеить ядерный полигон, а LLVM ещё не превратился в юзабельный продукт он и сейчас с трудом юзабельный, на пердоликсе некоторый софт можно было собирать только в О1, в О2 тебе отрывало жопу.
502 3180966
>>80388
У триситтера есть биндинги в растoпарашу.
>>80604

>Пик


Вот поэтому раст в хуилион раз проще няшной.
503 3180980
>>80604

> компилятор мог смело выкинуть в нём строку, печатающую 'Hello'


Нет, у тебя там нет никакого UB в выводе строки. То что ты стек захуячил - это не UB и вообще к строке не имеет отношения.
image.png49 Кб, 732x572
504 3181002
В Rust есть pattern matching для строк? По равенству есть, да. А по шаблонам? Или просто "содержит подстроку"?
505 3181024
>>81002
чтобы вместо _ if строка.contains(подстрока) => {}можно было написать, например, "подстрока" => {}

в числах же есть диапазоны, хули со строками все так убого?
506 3181195
>>80980
В самом выводе строки нет. Но я писал

>условие приводящую к её выполнению является UB



Читаем стандарт и видим, что x не может быть 5 и более, иначе в строке #5 будет UB. Поэтому компилятор мог бы с чистой совестью выкинуть условие в строке #6, потому что оно принципиально должно быть недостижимо.

An array subscript is out of range, even if an object is apparently accessible with the given subscript (as in the lvalue expression a[1][7] given the declaration int a[4][5]) (6.5.6).
1611364709228.png62 Кб, 1161x782
507 3181250
>>81195

> мог бы


Не мог, массив это сахар над указателем. Пикрилейтед абсолютно валидный код без UB. array subscript - это обращение по индексу. Индекс может быть любым.
image549 Кб, 1403x587
508 3181265
>>81250
Я тебе цитату привёл из стандарта с указанием номера статьи, где написано что это UB...

Вот сам параграф, если ты не умеешь в гугл.
509 3181293
>>81265
Ты сам видишь что там написано? Результат обращения UB, всё. UB значит что там может быть что угодно, стандарт не определяет что, но это не значит что туда нельзя обращаться. Компилятор никак не следит куда ты обратился, и уж тем более не оптимизирует как ты мечтаешь.
image554 Кб, 3648x1804
510 3181329
>>81293

>но это не значит что туда нельзя обращаться


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

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

Давай посмотрим на другой UB, который компилятор действительно эксплуатирует. Как видно результаты выполнения программы для -O1 и -O2 кардинально различаются. Вроде все значения помещаются в нужные типы. Почему так получается? Мой вариант объяснения происходящего:

При умножении x и y происходит неявное преобразование их к int (знаковое целое). Переполнение при умножении знаковых целых это UB. Именно это и происходит когда x = y = 0xFFFF. Но компилятор посчитал, что программист не будет передавать в функцию такие значения, которые приводят к переполнению. Поэтому при более высоком уровне оптимизации он использовал инструкцию jle (сравнение знаковых целых) вместо jbe (сравнение беззнаковых). Хотя казалось бы сравнивал он беззнаковую переменную и константу.

Честно признаюсь не очень понимаю, почему в этом случае применяется такая агрессивная оптимизация, которая ломает выполнение программы, ведь явного выигрыша она не даёт. При этом догадываюсь, почему нет агрессивной оптимизации в случае выхода за границы массива (сломается весь типичный сетевой код нахрен, в котором это используется намеренно, когда объявляется массив длинной 1 в конце структуры, описывающий пакет). Одно знаю точно — в си слишком дохера неявностей, которые приводят к неожиданным результатам. В этом плане раст к ассемблеру ближе будет, лол.
image930 Кб, 3648x1804
511 3181351
Кстати, смеха ради переписал тот же пример на расте. Как видно, при -O3 результат всё ещё странный, зато при -O0 мы ловим панику. За что раст мне и нравится.
512 3181397
Что-то отвлёкся с этими UB в си от темы треда.
>>81002
Кейсы в match должны быть известны на этапе компиляции. foo.contains и шаблоны под это ограничение не подходят, зато if-guards как в твоём примере, позволяют обойти это ограничение. Может поменяют в будущем, т.е. сделают сахарок над if-guard'ами.
513 3181402
Ну и вдогонку — ты можешь сделать наоборот. Т.е. регэкспом вытащить подстроку из foo и матчить её.
514 3181476
>>80604
Ну во первых test у тебя публичная функция и просторов для оптимизации в ней нет, оптимизации надо смотреть там где ее вызывают, то есть в main, где по идее можно все заранее сосчитать и выкинуть нахуй вызов функции.

Что касается UB, то это уже выходит за рамки возможностей компилятора, компилятор не разбирается в твоем кгновнокоде,
Хотя для отлова таких простых ошибок как у тебя в компиляторы добавили опцию -Wall, в рантаймных случаях только валгринд или эльбрус в режиме -mptr128.
И это не UB это ошибка
515 3181502
>>81329

>В этом плане раст к ассемблеру ближе будет


Ну прост надо Си хорошо знать и не будет проблем, поэтому он и сложный.
>>81402
Мне кажется, ему взять вездесущую либу ахо karasique для этого, если там есть прегенерация.
>>81476

>Хотя для отлова таких простых ошибок


Дядь, там уб-санитайзеры в гцц уже завезли лет 10 назад.
516 3181505
>>81329

> вправе сделать вывод


Нет. Неконстантные бранчи никогда не будут удалены, это стандарт запрещает.

> на другой UB


И нахуй ты это притащил? До этого вообще другая ситуация была, ты 🍑л что бранч будет оптимизирован из-за левого UB.

> jle (сравнение знаковых целых) вместо jbe


GGC всегда был кривым говном в О2. В шланге и msvc всегда будет корректно считать. Если как ты сделать, то он с оптимизациями вообще при компиляции посчитает, если через аргументы, то всё равно не будет переполнения. Без оптимизаций тоже нет переполнения.
>>81351

> выдал неправильный результат


> За что раст мне и нравится.


Лол.
517 3181513
>>81250
Ну вот это UB однозначно, ты вылазишь в стек процедуры x86й машины

>это сахар над указателем.


Это барьер от долбоебов с ружьем направленным себе в ноги.
518 3181519
>>81502

>Дядь, там уб-санитайзеры в гцц уже завезли лет 10 назад.


Куда именно "в гцц" ?
Ну и адрес санитайзер это уже совсем про зоонаблюдения за указателями.
519 3181524
>>81519
-fsanitize=undefined
520 3181556
>>81476

>оптимизации надо смотреть там где ее вызывают, то есть в main


Оптимизации заканчиваются на границе функций.

>Что касается UB, то это уже выходит за рамки возможностей компилятора, компилятор не разбирается в твоем кгновнокоде


Разбирается, я что зря этот пример показал?

>Хотя для отлова таких простых ошибок как у тебя в компиляторы добавили опцию -Wall, в рантаймных случаях только валгринд или эльбрус в режиме -mptr128.


В данном "простом" случае ничего из этого не поможет. ну ладно, проверял только -Wall.

>И это не UB это ошибка


Это UB, пример которого буквально приведён в определении UB.

>>81505

>И нахуй ты это притащил?


Чтобы показать, как компилятор из-за UB и оптимизаций ломает программу.

>Нет. Неконстантные бранчи никогда не будут удалены, это стандарт запрещает.


> В шланге и msvc всегда будет корректно считать.


Правда?
521 3181569
О, это я ещё опечатку допустил, кекв, 0 пропустил при сравнении, gcc тоже одну ветку нахер выкидывает и ассемблерный код ещё проще оказывается, безо всяких сравнений.

msvc кстати тоже выкидывает, но код генерирует хуже.
522 3181579
>>81556
>>81569
Возьми реальный компилятор, а не онлайн-парашу. Я тебе уже кинул скрины, оно при всём желании не ломается, а при включенных оптимизациях он оптимизирует нахуй вообще весь код кроме принта.

> msvc кстати тоже выкидывает, но код генерирует хуже


Хотя бы потому что у него нет аргумента -О2. Хватит уже траллить тупостью.
523 3181593
>>81556

>В данном "простом" случае ничего из этого не поможет. ну ладно, проверял только -Wall.


Потому что в Wall и Wextra не все флаги, но да, подобное не ловится через линтер -Wconversion, но через -Warith-conversion есть (но он слишком шумный).
524 3181612
>>81579
Ну взял, что дальше?

>Я тебе уже кинул скрины


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

>Хотя бы потому что у него нет аргумента -О2


Похоже в винде (или в msvc) /O2 и -O2 это одно и то же. Проверить сам не могу, верю годболту. Если ввести откровенную чушь, msvc даёт варнинг.
525 3181652
>>81612
🍑ц ты тупой.
526 3181657
>>81556

> Оптимизации заканчиваются на границе функций.


>Разбирается, я что зря этот пример показал?


Сперва ты мне показался грамотным, а теперь кажшься тролем

>Это UB, пример которого буквально приведён в определении UB.


Там написано про какой то array object
int arr[] ={ 1, 2, 3} - это не array object, запись куда-то запределы кучи это по большому счету сегфолт.
image201 Кб, 917x432
527 3181668
528 3181685
>>81657

>Сперва ты мне показался грамотным, а теперь кажшься тролем


Не очень понял. Почему?

>int arr[] ={ 1, 2, 3} - это не array object, запись куда-то запределы кучи это по большому счету сегфолт.


Ну здрасьте, учимся объявлять массивы на дваче. Это то же самое, что int arr[3] = { 1, 2, 3];
529 3181728
>>81685
array это куча, а не массив
куча это просто данные лежащие на стеке (либо в памяти) линейно.

Разница в том что кучу нельзя воспринимать как нечто целостное, да и работать с ней тоже не получится ее нельзя записать целиком в фаил или передать копию другой функции.
Это неструктурированные данные у которых нет начала и конца, есть только адрес позиции.
Что бы создать "массив" в Си надо делать вот так:
struct { int d[4]; } arr_t;
530 3181751
>>81728
Ммм. Любопытно.
image305 Кб, 1950x1358
531 3181770
>>81502
>>81524
Вот кстати, здравомыслящий человек. Я совсем забыл про это дело, оно реально отлавливает проблему. Жаль в эмбеде проблематично применить, я бы юзал. Но раст всё ещё лучше с этим справляется, щитаю!
532 3181874
>>81770
гцц выдает ворнинг без всяких санитайзеров
А вообще почему он пишет signed int и почему переполнение беззнакового числа?
Может из за того что ты знаковый литерал подставил? Сделай >= 0x80000000u
533 3182038
>>81874
Не, там проблема в том, что си неявно приводит x и y к int'у (int promotion rules). Это делается для всех типов меньших по размеру чем int, просто потому что процессор не может в арифметические операции для таких типов. Раст в такой ситуации кстати просто отказывается компилировать и заставляет тебя явно все приведения провести и ты либо напишешь правильно (приведёшь x и y к u32), либо сделаешь багу, из-за которой программа будет падать в панику (см. >>81351).

А скинь выхлоп как ты компилируешь с gcc, только добавь флаг -v? У меня не получается никаких варнингов, чтобы я ни делал.
534 3182286
>>82038
Ты что-то не договариваешь оно у тебя ругается на то что 65k*65k не может дать положительный знак в случае int недвусмысленно намекая что надо бы перейти на long. Но у тебя везде беззнаковые стоят и никакого переполнения в случае беззноковых чисел не должно возникать.

Ты троллишь что ли я не понимаю?
Ебучая двач-тематика, даже в pr жирные сидят и кормят говном.
535 3182332
>>82038

>А скинь выхлоп как ты компилируешь с gcc, только добавь флаг -v? У меня не получается никаких варнингов, чтобы я ни делал.



Пикрелейтед, происходит такое потому, что процессору для перемножения надо положить числа на регистры и поскольку не указано что это беззнаковая константа, компилятор по логике должен сделать следующее действие: положить число на регистр, вызвать команду расширения знаком команды после чего умножить
то есть
(short)-1 х (short)-1 => (int)-1 х (int)-1
или
0xffff х 0xffff => 0xffffffff х 0xffffffff
то есть почему происходит переполнение думаю теперь понятно.

Почему у тебя вылазит ошибка: наверное потому что ты компилируешь с -O3 и компилятор инлайнит функцию тест и в результате имеем что то подобное. Либо это ошибка во фронтендах шланга u16 u16 не должно превращаться в int int, беззнаковый тип для того и введен что бы компилятор знал что никаких преобразований над числом делать не нужно.
536 3182384
>>81770

>Но раст всё ещё лучше с этим справляется, щитаю!


1) санитайзеры только для тестов
2) с гцц/шлангом для си можно добиться абсолютно такого же поведения при signed overflow как и в пидорасте
Проблема си в том, что нужно хорошо знать все подводные и инструмент, поэтому си - это для профессионалов, а раст для новечков.
537 3182387
>>82332
Линтер сразу это ловит, потому что у тебя литералы сразу перемножаются, если как у челика выше с переменными, то не всё так просто.
538 3182420
>>82387
справа литералы точно так же перемножились после инлайна функции, никаких предупреждений нет, потому что аргументы определены как unsigned short и их умножение выглядит как 0x0000FFFF x 0x0000FFFF => 0xFFFE0001
никакого переполнения быть не должно.
539 3182429
>>82420

>никакого переполнения быть не должно


Произведение 65535 и 65535 не может быть представлено знаковым интом.
540 3182444
пхех блять с оптимизациями gcc всегда выплевывает неправильный результат (причем O1-O3 однохуйственно).

Это либо ошибка, либо в составе -O по умолчанию включаются разные ломающие оптимизации.
541 3182448
>>82429
А кто просил знаковый int?
умножаются беззнаковые шорты, записываются в беззнаковый результат откуда берется знаковый инт?
542 3182450
>>82448
У тебя у rvalue будет тип signed int.
543 3182463
>>82384
В целом согласен, вот только вывод мне кажется не вполне однозначный должен быть. С одной стороны в раст вкатиться заметно труднее чем в си, но при этом это инструмент, который будет работать хорошо и корректно и обладает всеми современными удобствами. С другой стороны в си миллион подводных камней, про которые нужно просто знать™, но зато разработка проще и интуитивнее. Все жалуются про неуклюжесть и неудобства раста в серьёзной и крупной разработке, но и отлаживание вот таких багов на си может занять уйму времени и нервов. Хз, что лучше на самом деле.

Могу однозначно одно сказать изучить раст стоит хотя бы просто для себя как специалиста. Я вот уже почти год решаю задачи на литкоде с применением раста, читаю статьи, смотрю конференции и лекции на ютубе, даже парочку PR отправил в опен-сорсные проекты. В общем, немножко поднабрался опыта в этой области. И хоть я не применял его непосредственно в работе (хотя парочка маленьких сайд-проектов на расте у нас имеется, но их ведёт один человек и ему моя помощь не была нужна), но могу с уверенностью сказать, что всё это поменяло моё восприятие и си и плюсов.
544 3182471
>>82448

>А кто просил знаковый int?


int просит твой процессор, он с шортами работать не умеет. В знаковые инты их по умолчанию переводит твой компилятор, потому что значение беззнаковых шортов влазит в знаковый инт. Такие дела.
545 3182481
>>82463

>Могу однозначно одно сказать изучить раст стоит хотя бы просто для себя как специалиста


Если ты зумерок-пидорок, то да стоит учить %язык_нейм%, чтобы думать, что это там чёто помогает тебе, но если базированный профессионал, то ты просто изучаешь технологию, потому что она используется на проекте. Учить пидораст, как и любую другую хуйню, не стоит, если в этом нет практического смысла.
546 3182483
>>82471

>int просит твой процессор


Челик про type promotion написано в стандарте, какой процессор нахуй, ты долбоёб?
Screenshot 2024-06-06 at 12-55-46 Compiler Explorer.png98 Кб, 656x855
547 3182497
>>82450
у какого в 🍑 rvalue?
как ты для себя объясняешь что код скомпилированый без "оптимизаций", как написано - положить, умножить, сравнить итд, приходит к правильному результату, а если включить оптимизации то в выхлопе результат неправильный?

Мало понимать отдельные строчки в ассемблере, надо понимать код целиком. Вот результат с -O1 и что мы видим? Он тупо убрал половину кода и подставляет в принт заранее заготовленное значение внезависимости от результата.

Впрочем я сталкивался не один раз уже с историей когда компилятор в ассемблерный выхлоп выдает не совсем тоже что и в итоговой программе и доверять тому что в нем написано особо не стоит. Надо короче компилировать на хосте и делать обжект дамп бинарника или как там оно называется.
548 3182509
>>82481
No offense, но у тебя логика типичного вкатуна. Базированный профессионал потому и профессионал, что любит учиться и вылезать за рамки обязанностей и потребностей. Вот этот подход — "учить только то что нужно" как раз и отличает новичков, которые в индустрии по причине денег. К ним ещё добавляется зумерская лень — "работать только по расписанию", которую они называют work-life balance, получается унылое говно на выходе.

>>82483
А теперь пораскинь мозгами и подумай почему оно в стандарте появилось. Думаешь, чтобы специально запутать двачеров?
549 3182514
>>82509

>Базированный профессионал потому и профессионал


Потому что не долбоёб.

>А теперь пораскинь мозгами и подумай почему оно в стандарте появилось


Умунитарий, спокнись уже.
550 3182523
551 3182526
>>82523
Но если ты правда тупой.
552 3186359
ПЕРЕКАТ >>3186358 (OP)
ПЕРЕКАТ >>3186358 (OP)
ПЕРЕКАТ >>3186358 (OP)
553 3199100
>>79410

>Я хз как можно не понять концепцию указателей.


Я вот совершенно не понимаю концепцию ссылок в C++. Несколько раз читал разные учебники, и все равно ни хрена не понял.
А в указателях хз, что сложного, это просто адрес в памяти. Обычная переменная расположена по фиксированному адресу, а у указателя его можно двигать туда-сюда. И выделять/освобождать динамически.
Тред утонул или удален.
Это копия, сохраненная 1 сентября в 04:11.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски