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)

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

Сори, неправильно выразился, когда писал про подсчёт чисел. Не проснулся ещё.
Обновить тред
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски

Скачать тред только с превьюс превью и прикрепленными файлами

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