Сохранен 583
https://2ch.hk/pr/res/2017017.html
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Rust #16 /rust/ /rust/

 Аноним 02/05/21 Вск 23:49:59 #1 №2017017 
image.png
image.png
Rust — язык, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
https://www.rust-lang.org/

Обязательно для прочтения: https://doc.rust-lang.ru/book/

Вместо шапки: https://gist.github.com/TatriX/183c816f1346d418f969c4576c2b9b41

Ресурсы на русском: https://rust-lang.ru/

Предыдущий тред: >>1880122 (OP) (OP)
Аноним 02/05/21 Вск 23:53:48 #2 №2017023 
Собственно, вопрос по сабжу, норм ли вакансии в расте по крипте или нет?
Аноним 03/05/21 Пнд 03:45:59 #3 №2017147 
Научите понимать синтаксис? Нихуя не понимаю

Мимо крестоёб
Аноним 03/05/21 Пнд 03:46:52 #4 №2017148 
>>2017023
Все вакансии по крипте это кабанчиковый раж на максималках. Проработаешь максимум полгода пока кабанчик не разорится, но скорее всего заебут ещё на этапе собесов.
Аноним 03/05/21 Пнд 07:36:20 #5 №2017168 
>>2017147
Rust book
Аноним 03/05/21 Пнд 08:29:04 #6 №2017187 
>>2017147
https://learnxinyminutes.com/docs/rust/
Аноним 03/05/21 Пнд 09:08:43 #7 №2017207 
>>2017147
Абсолютно та же ситуация, вроде интересный язык, а читать трудно ну вообще. Может только поначалу так, хз
Аноним 03/05/21 Пнд 16:30:55 #8 №2017636 
>>2017148
хм, ну я вообще в мобилках варюсь последние 3 года. Посмотрел на раст, синтаксически похож на swift, только импрувнутый. Покопаю его и посмотрю по собесам. Хочется кабанчиком в норм блокчейн устроится, в near\ckb какой нибудь.
Аноним 03/05/21 Пнд 23:19:58 #9 №2018191 
Аноны, извиняюсь, что не поблагодарил в прошлый раз за ответы про дак тайпинг. Спасибо! В итоге понял, что общие интерфейсы к разным крейтам по-человечески сделать не получится, и лучше не выёбываться и писать для них trait/impl trait адаптеры в самом приложении.

Теперь более общий вопрос: а как у нас вообще принято проектировать приложения?

В плюсах я писал от общего к частному: есть корневой класс, создаваемый main-ом и живущий до самого выхода, в нём были классы на отдельные подсистемы, каждый из них имел обратную ссылку на объект корневого класса. Допустим, если методу гуя надо написать в лог, он через эту ссылку идёт и вызывает логгер. То есть, все зависимости вложенных классов хранятся в родительском.

В ржавом же получается, что я так сделать не могу? Если я положу в struct ссылку &mut на объект то пока она есть, никто другой им пользоваться не сможет. Что тогда делать - передавать все зависимости в аргументах методов? Склоняюсь к созданию временного дублирующего struct-a, в котором только нужные зависимости: методы пишутся к нему, а исходный объект передается по ссылке в методы. Но я как бы собой не очень горд за это - получилось не как хотелось, а как получилось.
Аноним 03/05/21 Пнд 23:29:04 #10 №2018201 
>>2018191
Извиняюсь, затупил. Не важно, куда писать методы, главный вопрос - зависимости каждому методу придется передавать заново?
Аноним 04/05/21 Втр 14:27:33 #11 №2018946 
Аноны можно ли вкатится в раст не зная плюсов ? То есть это будет вкат сверху вниз из жса. Опасаюсь, что на расте книг хуй да нихуя, и это просто знакомство с синтаксисом для опытных прогеров на плюсах и джаве. Как раст с нуля идет ?
Аноним 04/05/21 Втр 14:59:08 #12 №2018982 
>>2018946
нет, не надо. Вкатись лучше в плюсы, и если тебе не будет хватать их(или заебёт) тогда изучай раст. Ты если из ЖСа пойдешь в раст ты не поймешь фичей раста
Аноним 04/05/21 Втр 15:33:55 #13 №2019057 
>>2018946
Вкатиться можно, но 1) это системный язык, придется изучать байтоёбство и 2) чтобы не вляпаться в ошибки плюсов, он заставляет сразу писать строгий и корректный код, поэтому после хуяк-хуяк будет культурный шок и жалобы. В принципе, плюсы тоже не нужны - их учить больше года, и если хочешь именно системное программирование, учи сишечку. Там уже решишь, стоит дальше развивать эту тему или нет.
Аноним 04/05/21 Втр 23:34:09 #14 №2019689 
>>2018982
>>2019057
Раст хотел взять "на вырост", т.к. в жс щас все усложняется, появился webassembly и хуй пойми что будет через 3-5 лет. Поэтому думаю пердолить параллельно, что бы потом жидко не обосраться.
Аноним 05/05/21 Срд 00:55:31 #15 №2019775 
>>2019689
Не нужно учить на будущее. когда нужно будет - пригодиться.
Раст сейчас стоит учить ради работки на крипте. Остальное предоставь низшим по развитию людям, имхо.

Лучше найди себе хобби, чем учить то, что находится за рамками твоей рабочей специальности (фронта)
Аноним 05/05/21 Срд 00:56:01 #16 №2019776 
>>2019775
> когда нужно будет - пригодиться.
когда нужно будет - выучишь. фикс
Аноним 06/05/21 Чтв 01:17:41 #17 №2021055 
Кто-нибудь на Rust'е модули для пайтона писал? Какие подводные? Какие байндинги юзали?
sageАноним 06/05/21 Чтв 09:24:55 #18 №2021152 
>>2019689
> Раст хотел взять "на вырост"
Кек.
Аноним 07/05/21 Птн 12:12:11 #19 №2022769 
Чёт не гуглится обфускатор растового кода. Такое есть вообще?
Аноним 07/05/21 Птн 13:38:12 #20 №2022900 
>>2022769
зачем?

Аноним 07/05/21 Птн 14:19:25 #21 №2022939 
>>2022900
Проста
Аноним 07/05/21 Птн 17:42:00 #22 №2023220 
>>2018201
>Если я положу в struct ссылку &mut на объект то пока она есть, никто другой им пользоваться не сможет. Что тогда делать - передавать все зависимости в аргументах методов?

Приведи пример. Пока что звучит все странно. Если это разделяемый объект то очевидно, нельзя мутабельную ссылку раздавать всем подряд. То, что в C++ можно - это не значит, что это правильно или так надо.
Аноним 08/05/21 Суб 17:26:56 #23 №2024364 
>>2019689
> появился webassembly
В Расте как раз first-class интеграция с WASM'ом
Аноним 08/05/21 Суб 17:28:45 #24 №2024367 
>>2021055
Для байндингов pyo3 должно хватить: https://github.com/PyO3/pyo3
Аноним 09/05/21 Вск 22:03:21 #25 №2026136 
>>2017017 (OP)
Ржавые, я вот реально не понимаю вот это, объясните мне
> позволяющий каждому создавать надёжное программное обеспечение
С какого хуя избавившись от ошибок работы с памятью должна хоть сколько-нибудь вырасти надёжность конечного результата?
Первый пример. Берём огромный список проектов на гитхабе - awesome-rust. Начинаем открывать все подряд. И наблюдаем странную "надёжность" - в issue десятки активных багов. Примерно как в проектах с таким же количеством звёзд на крестах.
Или личный опыт. Берём рандомную либу с малым количеством звёзд или заброшенную больше года назад и получаем дикий пердолинг уровня крестов. Результат такой, что пиздец.
Я вот сразу вижу первый пиздеж:
> позволяющий каждому
Это наглый пиздёж. Фактически я вижу "надёжное программное обеспечение" только от реально прошаренных кодеров. Из-за высокой сложности языка получаем от "каждого" пиздец уровня крестов или даже хуже.
Возникают вопросы. Зачем это говно нужно? Работать? Так работу не найдёшь. Для себя? Опенсорс в жопе с кучей неподдерживаемого кода с 2018-1019 года, высокая сложность изучения, вечные баги от "каждых". Сомнительное удовольствие. Единственный профит видится для кучки прошаренных кодеров, чтоб остатки багов от дырявой памяти прикрыть.
Так вот объясните мне что за религия вокруг ржавой "надёжности", если по факту для вкатывальщика с какого-нибудь go получаем только сплошную боль и пердолинг, мало отличающийся от подобного в крестах, при этом имея надежность хуже самого go? Да даже с сишки на линуксе не вижу профитов перекатываться в раст.
Аноним 09/05/21 Вск 22:39:58 #26 №2026171 
>>2026136
> объясните мне
Пашел нахуй
Аноним 09/05/21 Вск 22:50:15 #27 №2026180 
>>2026136
>Да даже с сишки на линуксе
Поговорим когда в сишке и плюсах пакетный менеджер завезут.
Аноним 09/05/21 Вск 23:00:00 #28 №2026198 
>>2026180
> когда
Уже много лет как.
https://github.com/microsoft/vcpkg
Аноним 09/05/21 Вск 23:54:21 #29 №2026221 
>>2026136
На расте блокчейн говно сейчас во всю пилят. Только ради этого и стоит выучить это говно.
А так ну хз, имхо новые языки не сильно нужны, потому что кроме как синтаксическим сахаром они ничем толком не отличаются от проверенных годами инструментов
Аноним 10/05/21 Пнд 09:57:46 #30 №2026348 
>>2026221
>блокчейн
Блокчеин рынок вообще жив еще ? какие перспективы у этого дерьма в ближайшие 5 лет ? Смотрел вакансии, в рф полторы штуки, остальные за бугром.
Аноним 10/05/21 Пнд 14:59:39 #31 №2026520 
>>2022769
бамп
Аноним 10/05/21 Пнд 19:11:46 #32 №2026787 
>>2018191
> В итоге понял, что общие интерфейсы к разным крейтам по-человечески сделать не получится
Пока не завезут GAT [1] и TAIT [2] использовать трейты как аналог интерфейсов например из той же жавы будет очень хуёво.
> Если я положу в struct ссылку &mut на объект то пока она есть, никто другой им пользоваться не сможет.
Если приложение однопоточное, то для этого используется RefCell [2] или UnsafeCell [3], если многопоточное то мютекс. В таком случае можно передавать простую ссылку в дочерние классы и преобразовывать её для записи при необходимости.
> Допустим, если методу гуя надо написать в лог
В расте для этого используются синглтоны. Либо глобальный, либо в TLS (thread local storage): [4]. Запихивать в каждый класс свой логгер (как делают в некоторых яп) нет необходимости, потому что благодаря мощным макросам логгеру сразу передаётся в каком модуле/файле (и даже на какой строке) был вызван лог.

[1]: https://github.com/rust-lang/rust/issues/44265
[2]: https://github.com/rust-lang/rust/issues/63063
[2]: https://doc.rust-lang.org/std/cell/struct.RefCell.html
[3]: https://doc.rust-lang.org/std/cell/struct.UnsafeCell.html
[4]: https://docs.rs/tracing/0.1.26/tracing/#in-executables
Аноним 10/05/21 Пнд 19:12:36 #33 №2026792 
>>2026787
Проебался с нумерацией ссылок, лол.
Боль Аноним 10/05/21 Пнд 21:53:02 #34 №2027010 
Дарова, аноны. Я хочу чтобы моя программа писала в файл,
хеш-сумма и потом имя файла. На данный момент пишет имя файла и затем хеш-сумма.
Код https://pastebin.com/VmecKmkS
Аноним 11/05/21 Втр 09:00:59 #35 №2027293 
>>2027010
Нихера не вижу в каком месте ты что-то куда-то пишешь, (кроме ошибок симлинка), так что ты тупо не тот код скинул. Очевидно, что смотреть надо в том месте, в котором ты пишешь что-то в файл, а не алгоритмы твои ебаные.
Аноним 11/05/21 Втр 09:02:49 #36 №2027294 
>>2026520
Обфускатор на раст не нужен. Если ты знаешь раст, то тебе поебать на обфускатор, а если ты не знаешь раст, то ты в жизни не распарсишь какой-нибудь

unsafe fn bar<'a, 'b: 'a, T: 'a, U: 'b>(t: T) -> U { transmute(t) }
Аноним 11/05/21 Втр 11:08:56 #37 №2027354 
>>2017017 (OP)
Почему растом так активно увлекаются геи и трапы?
Аноним 11/05/21 Втр 17:27:37 #38 №2027701 
>>2027293
ок, ебать а чё требуется тебе тогда? фулл соурс??
Аноним 11/05/21 Втр 18:27:57 #39 №2027749 
>>2027701
Может программирования не для тебя? Ты жалуешься на то, что строки в файл записываются в неправильном порядке. Но при этом даёшь код, который считывает файл и заполняет хэш-мапы. По идее ошибка будет в в коде, который непосредственно записывает в файл.
Аноним 12/05/21 Срд 21:06:41 #40 №2028925 
>>2024367
Знаю про pyo3, плюс есть ещё rust-cpython, которые, вроде как, параллельно пилят.
Было интересно, писал ли модули для пайтона кто-нибудь.
Аноним 13/05/21 Чтв 15:06:22 #41 №2029560 
>>2026348
лол
Аноним 13/05/21 Чтв 22:55:14 #42 №2029971 
Недавно вкатился в растобляди по работе. Мой сервис в main.rs разросся до того состояния, что пора его дробить на сорцы поменьше. Но как? Папочка с mod.rs и требухой? Или как? В растбуке эта тема как-то объяснена уклончиво "ну у нас есть модели, можешь навертеть как душе угодно". А со вложенностью непонятно. Посмотрел разные проекты, везде всё по разному, не понятно, как лучше и правильнее.

мимо пишу на питохоне в основном
Аноним 13/05/21 Чтв 23:27:43 #43 №2029983 
>>2029971
https://youtu.be/6cfcWzsvLrA?t=275
Аноним 13/05/21 Чтв 23:29:34 #44 №2029985 
.png
>>2029971
В расте (речь про 2018+ эдишн) есть два способа создать модули.

Первый - создать файл рядом с main.rs, например module1.rs. Теперь этот файл и будет модулем module1. В мейне ты его объявляешь как модуль, т.е. пишешь mod module1; а затем импортируешь оттуда что надо use module1::*;

Второй - создать каталог module1 и там внутри создать mod.rs, который и будет модулем с названием каталога. Как и в первом случае теперь в мейне надо объявить новый модуль mod module1; и можно оттуда импортировать что надо.

Вложенные модули делаются точно так же. Только есть один ньюанс - можно сам модуль объявлять как приватный (по-умолчанию) либо как публичный - pub mod inner_module; В случае публичного объявления тогда все кто используют внешний модуль будут иметь доступ и ко внутреннему.

Какой способ использовать - первый или второй решай сам. Некоторые считают, что первый способ более идиоматичный, но на самом деле это вкусовщина. Только не использую оба способа в одном проекте (выбери один) и всё будет нормально. Вот пикрил как пример. Модули с суффиксом _a созданы первым способом, с суффиксом _b - вторым.
Аноним 13/05/21 Чтв 23:53:10 #45 №2029995 
>>2029985
Возьму первый способ, он проще выглядит на мой взгляд.
Если использовать первый вариант для вложенных модулей, то в случае если у меня такая структура:

- module1
-- module2
--- utils2.rs
-- utils.rs
- main.rs

То импорты вложенного будут такими:

mod module1;

use module1::module2;
use module1::utils;

?
Аноним 13/05/21 Чтв 23:59:21 #46 №2029997 
>>2029985
В любом случае, спасибо, хорошо объяснил
Аноним 13/05/21 Чтв 23:59:39 #47 №2029998 
>>2029995
Да. Только не забывай создавать сами файлы модулей module1.rs и module2.rs и там объявлять вложенные модули. Раст ориентируется по объявлениям модулей внутри файлов, а не по структуре файлов в проекте в отличии от других яп.
Аноним 14/05/21 Птн 20:49:39 #48 №2030908 
>>2017147
Так же херня. Сначало хелоу ворлд и все минималистично. А потом пиздец начинается какой то.
Аноним 14/05/21 Птн 21:45:34 #49 №2030948 
>>2027354
про геев не знаю, но про трапов действительно смешно, нигде такой концентрации нет
Аноним 15/05/21 Суб 20:49:38 #50 №2031660 
Хочу вкатиться в Rust, как первый ЯП. Нужно ли чё то знать чтобы писать?
Аноним 15/05/21 Суб 21:21:40 #51 №2031693 
>>2031660
Помянем
Аноним 15/05/21 Суб 21:25:31 #52 №2031696 
какие языки /rust/ будет изучать, когда выпилится достаточное количество мейтейнеров, чтобы разработка языка встала? итт хочу потыкать nim
Аноним 15/05/21 Суб 21:49:25 #53 №2031706 
>>2031660
Лучше вкатись в Си сначала.
Аноним 15/05/21 Суб 21:56:47 #54 №2031713 
>>2031706
два цикория, не стал бы с раста начинать. если хочется делать что-то реальное почти сразу, можно голанг попробовать. но так си действительно поможет какие-то фундаментальные вещи ухватить.

>>2031660
но если всё же решишь ржаветь@траповать — как можно быстрее заканчивай раст бук и ебашь реальные штуки®, пусть для себя, но чтобы ты понимал что тебе нужно и как это хотя бы примерно работает. из учебников такого рода в целом можно научиться примерно ничему. поэтому если интересует какая-то теория, лучше изучай алгоритмы всякие, а язык вообще значения не имеет, на любом сможешь в короткое время начать писать.

да, о знаниях. научись пользоваться линупсовой консолью, хотя бы в том же wsl если ты виндоёб. без этого будет плохо и страшно.
Аноним 15/05/21 Суб 22:07:20 #55 №2031722 
>>2031713
Я уже Линуксоид, так что привык уже.
Аноним 17/05/21 Пнд 16:26:30 #56 №2033486 
Пару дней назад расту стукнуло 6 лет с момента выхода первой стабильной версии. Пока что на расте мало важного написано. Почему же так долго хайп держится?
Аноним 17/05/21 Пнд 17:02:23 #57 №2033532 
>>2033486
Потому что язык охуенный, очевидно. Ну и анализ алиасинга на уровне языка — слишком крутая киллер фича.
Аноним 17/05/21 Пнд 19:37:35 #58 №2033746 
bump
Аноним 18/05/21 Втр 10:38:34 #59 №2034176 
Почему я бросил раст? Год назад начал его изучать, но столкнулся с проблемой отсутствия документации благодаря её слишком быстрому устареванию. Натыкаешься на какую-нибудь статью или ответ на стаковерфлоу, а примеры оттуда уже не работают. Думаю, расту нужно ещё лет 10 на стабилизацию, чтобы проблем с документацией не было.
Аноним 18/05/21 Втр 11:07:10 #60 №2034203 
>>2034176
Это да, даже не сколько у фреймворков, а у самого языка.
Аноним 18/05/21 Втр 15:10:17 #61 №2034547 
>>2034176
Bruh
Какое отношение стаковерфлоу и статейки имеет к документации?
Аноним 18/05/21 Втр 15:29:19 #62 №2034592 
>>2034176
Раст был бы збс, если бы не балдёжно-молодежная организация, которая его писала.
Аноним 18/05/21 Втр 16:31:11 #63 №2034700 
>>2034176
документация действительно пиздец говна, особенно какие-нибудь крейты, где чтобы получить ответ приходится идти в их гиттер или матрикс или, чё там ещё, дискорд какой-нибудь.

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

>>2034592
>язык пишется большой корпорацией FAANG типа
>на выходе хуйня
>язык пишется прогрессивными ФОСС женщинами (male)
>на выходе хуйня

есть ли выход?
Аноним 20/05/21 Чтв 16:28:29 #64 №2036701 
Почему это https://rust-lang-nursery.github.io/rust-cookbook/web/clients/requests.html гамно не компилируется?
Аноним 20/05/21 Чтв 16:29:17 #65 №2036702 
>>2036701
error[E0432]: unresolved import `error_chain`
--> src/main.rs:1:5
|
1 | use error_chain::error_chain;
| ^^^^^^^^^^^ use of undeclared crate or module `error_chain`

error: cannot determine resolution for the macro `error_chain`
--> src/main.rs:4:1
|
4 | error_chain! {
| ^^^^^^^^^^^
|
= note: import resolution is stuck, try simplifying macro imports

error[E0433]: failed to resolve: could not find `blocking` in `reqwest`
--> src/main.rs:12:28
|
12 | let mut res = reqwest::blocking::get("http://httpbin.org/get")?;
| ^^^^^^^^ could not find `blocking` in `reqwest`

error[E0107]: this enum takes 2 type arguments but only 1 type argument was supplied
--> src/main.rs:11:14
|
11 | fn main() -> Result<()> {
| ^^^^^^ -- supplied 1 type argument
| |
| expected 2 type arguments
|
note: enum defined here, with 2 type parameters: `T`, `E`
help: add missing type argument
|
11 | fn main() -> Result<(), E> {
| ^^^

error: aborting due to 4 previous errors

Some errors have detailed explanations: E0107, E0432, E0433.
For more information about an error, try `rustc --explain E0107`.
error: could not compile `test`

To learn more, run the command again with --verbose.
Аноним 20/05/21 Чтв 16:32:28 #66 №2036708 
Или вот https://rust-lang-nursery.github.io/rust-cookbook/web/clients/download.html

НАХУЯ делать примеры, если это говно не может скомпилироваться?
>async fn main() -> Result<()> {
> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `main` function is not allowed to be `async`
Аноним 20/05/21 Чтв 17:47:20 #67 №2036850 
>>2036701
>>2036708
> код копипасть
> мозг не включай
> ошибки не читай
Аноним 21/05/21 Птн 01:43:27 #68 №2037137 
>>2036708
У меня все работает. Что я делаю не так?
Аноним 21/05/21 Птн 15:40:43 #69 №2037607 
>>2037137
Мозг включаешь, очевидно, в отличие от стонущей макаки.
Аноним 22/05/21 Суб 13:46:53 #70 №2038470 
Можно ли на Rust делать графические приложения, а не только консольные или сетевые?
Аноним 22/05/21 Суб 18:57:45 #71 №2038950 
>>2038470
Чел...
Графические приложения можно делать на любом языке при наличии соответствующих библиотек.
https://www.areweguiyet.com/
Аноним 22/05/21 Суб 19:12:38 #72 №2038966 
image.png
Аноны, ну шо за нах?
Аноним 22/05/21 Суб 21:37:47 #73 №2039117 
(Как же ржавенький спасают макросы, а! Напишите «Спасибо Дэйв Херман» в этот тред и вас возьмут на ржавую галеру уже завтра)

>>2038966
Код-то покажи.

Аноним 22/05/21 Суб 21:42:08 #74 №2039124 
>>2039117
> Как же ржавенький спасают макросы, а!
Ну так процедурные макросы по сути это кодогенерация, встроенная в язык. Можно даже писать вместо растокода с++ код и компилировать его внутри макросов. https://github.com/mystor/rust-cpp
Аноним 22/05/21 Суб 23:10:18 #75 №2039201 
image.png
>>2039117
Что показать? Вот же, ide мне в одном и том же хинте пишет, что тип не задан, и тут же ниже показывает выведенный тип.
Конкретно тут, res выведен правильно из возвращаемого типа функции, в конце я его как Ok(res) отдаю.

Ещё бывает наоборот, как на этом пике: анализатор пиздит на Moved Value, но всё прекрасно конпелируется.
Аноним 23/05/21 Вск 07:11:40 #76 №2039378 
>>2036708
>НАХУЯ делать примеры, если это говно не может скомпилироваться?
Оттуда примеры и не будут компилироваться, это же не golang. В 90% примеры даже из readme на гитхабе не работают. Я хз зачем так делают, возможно потому что раста-кодеры заднеприводные извращенцы, а может по другой какой-то причине.
Аноним 23/05/21 Вск 08:55:30 #77 №2039406 DELETED
39463672169630.jpg
>>2017017 (OP) >>2017023 >>2017147 >>2017148 >>2017168 >>2017187 >>2017207 >>2017636 >>2018191 >>2018201 >>2018946 >>2018982 >>2019057 >>2019689 >>2019775 >>2019776 >>2021055 >>2021152 >>2022769 >>2022900 >>2022939 >>2023220 >>2024364 >>2024367 >>2026136 >>2026171 >>2026180 >>2026198 >>2026221 >>2026348
Почeмy я бросил рaст? Год нaзaд нaчaл eго изyчaть, но столкнyлся с проблeмой отсyтствия докyмeнтaции блaгодaря eё слишком быстромy yстaрeвaнию. Нaтыкaeшься нa кaкyю-нибyдь стaтью или отвeт нa стaковeрфлоy, a примeры оттyдa yжe нe рaботaют. Дyмaю, рaстy нyжно eщё лeт 10 нa стaбилизaцию, чтобы проблeм с докyмeнтaциeй нe было.
Аноним 23/05/21 Вск 08:58:31 #78 №2039407 
>>2039406
Плюс токсичное русскоязычное комьюнити.
Аноним 23/05/21 Вск 09:07:19 #79 №2039408 
>>2038950
Так мне и в треде по Go говорили, но по факту ни одна из этих библиотек не работала. А без написания современных графических приложений, никто не будет воспринимать язык всерьёз.
Аноним 23/05/21 Вск 11:49:22 #80 №2039546 
>>2039408
Напиши библиотеку, напиши ось. Ты ещё и в плюсотреде срёшь?
Аноним 23/05/21 Вск 13:15:30 #81 №2039612 
>>2039201
Так проблема не в компиляторе, а в артефактах прошлой подсветки. Иди в виме код пиши, там проблем таких нет, а если есть, они решаются простым :e
Аноним 23/05/21 Вск 13:27:14 #82 №2039632 
fn x() {}

mod a {
__mod b {
____// как здесь вызвать x?
__}
}
Аноним 23/05/21 Вск 17:53:00 #83 №2039938 
>>2039632
use super::*
Аноним 23/05/21 Вск 18:43:03 #84 №2039994 
>>2039612
Нет, эта хуйня давно держится, прошло уже несколько переоткрытий иде и очисток кеша.
Аноним 23/05/21 Вск 18:46:43 #85 №2040001 
>>2039632
Никак, потому что x не pub
Аноним 23/05/21 Вск 22:43:30 #86 №2040262 
>>2039632
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=852cbe396882ec4c43402a2219e60a43

Есть два варианта, оба я там нарисовал.
Аноним 23/05/21 Вск 22:47:12 #87 №2040269 
>>2039994
Ты каким плагином пользуешься? Давно обновлял?
Аноним 24/05/21 Пнд 10:26:54 #88 №2040606 
Хочу написать базу данных на расте, для практики. До этого никогда с таким не сталкивался, писал только энтерпрайз-парашу на джаве. Какие подводные?
Аноним 24/05/21 Пнд 11:13:32 #89 №2040688 
>>2040606
Что такое энтерпрайз?
Аноним 24/05/21 Пнд 13:32:30 #90 №2040957 
>>2040606
Никаких, пиши
Максимум что может быть, жопа сгорит от семантики владения и компилятора в целом
Аноним 24/05/21 Пнд 13:35:28 #91 №2040963 
>>2040606
Не осилишь.
Аноним 24/05/21 Пнд 15:35:08 #92 №2041166 
>>2040957
После жавы жопа скорее сгорит от неполноценности трейтов. GAT и TAIT очень сильно не хватает когда используешь трейты как аналог интерфейсов из жавы.
Аноним 24/05/21 Пнд 16:08:15 #93 №2041230 
Скомпилировал хелло ворлд, а бинарник получился 3,4Мбайта. Это нормально вообще?
Аноним 24/05/21 Пнд 18:30:48 #94 №2041493 
>>2041230
Да
Аноним 24/05/21 Пнд 20:22:40 #95 №2041675 
>>2041493
Это же очень много! На том же С++ получается 14-16кбайт всего с учетом стандартных библиотек.
Аноним 24/05/21 Пнд 20:25:52 #96 №2041680 
>>2041675
Скажи мне, сколько он динамически линкует, и я скажу, кто ты.
Аноним 24/05/21 Пнд 21:38:27 #97 №2041757 
>>2041680
Разве раст не линкует glibc динамически? Даже так выходит около 4МБ, после стрипа 1МБ.
Аноним 25/05/21 Втр 10:45:45 #98 №2042140 
>>2041757
Нет, раст в отличие от сишки и крестов по дефолту всё статически линкует. Найди, где у крестов настройка статической линковки, а потом охуевай от реального размера бинарников.

Ах да, и не забудь про разницу размеров в дебаге и релизе.
Аноним 25/05/21 Втр 20:34:07 #99 №2042936 
>>2042140
https://redbeardlab.com/2019/05/07/rust-and-glibc-version/
>The rust compiler dynamically link the executable against the glibc in the system
Это тогда что?
Похожее написано здесь
https://doc.rust-lang.org/edition-guide/rust-2018/platform-and-target-support/musl-support-for-fully-static-binaries.html
>However, if you use the standard library, it will dynamically link to the system's libc implementation
В любом случае бинарник линкуется к сишной либе динамически.
>Найди, где у крестов настройка статической линковки
>не забудь про разницу размеров в дебаге и релизе
Релизная версия может весить больше.
У меня размер получился в несколько раз меньше чем размер плюсового бинаря, но с жму тулчейном бинарь линковался динамически.
https://pastebin.com/6hid7kJ9
Аноним 26/05/21 Срд 07:03:08 #100 №2043303 
>>2041230
Аноний, добавь в cargo.toml такое:

[profile.release]
lto = true

Получишь 1.2мб с отладочной информацией, 250кб без, и ощутимо возросшее время линковки. 12-14кб тоже можно, если откажешься от стандартной библиотеки и будешь работать через биндинги к libc. 4-8кб, если используешь системные вызовы напрямую (кстати, турбо паскаль от 1989 года под дос не мог без мэдскиллз делать бинарники меньше 7кб). По сравнению с крестами, код раздувается в основном за счёт всяких проверок - на переполнения, на выход за границы массива. И ещё ему приходится тащить с собой свою стандартную библиотеку, конечно.
Аноним 26/05/21 Срд 07:15:56 #101 №2043306 
>>2041166
Расскажи, пожалуйста, что за GAT и TAIT, не гуглятся эти аббревиатуры. А жопа моя дымится сейчас от трудностей байтоёбства: чтобы банально прочитать слово из v: Vec<u8>, приходится делать from_le_bytes(v[i..i+3]).try_into().unwrap(), не говоря уже о битовых массивах, и я уже ностальгирую по сишечке. Мелочи типа того что i16(-1) as u32 даёт 0xffffffff тоже неприятно удиваляют. А борроу-чекер - да, хуй с ним, RefCell во все поля (буквально).
Аноним 26/05/21 Срд 11:28:17 #102 №2043446 
Хотел что-то спросить, потом глянул - а хуле тут спрашивать? Давайте лучше я вам советы подам.

1. Чекнуть по-быстрому и увидеть только ошибки, без километров ворнингов:
RUSTFLAGS=-Awarnings cargo check

2. Собрать с пересборкой std (может сильно сократить размер)
rustup override set nightly; cargo build -Z build-std --target x86_64-unknown-linux-gnu --release; rustup override set stable

3. Развернуть Option<Option<T>> в Option<T>: flatten()

4. Развернуть Option<E>, Option<T> в Option<(T,E)>: zip()

макака, чини разметку
Аноним 26/05/21 Срд 11:39:08 #103 №2043453 
>>2043306
>RefCell во все поля
Если не используешь многопоток и связные списки с деревьями, то правила очень простые:
Если объект живёт дольше, чем функция, то можно передавать его по & куда угодно.
Если функция завершается и что-то возвращает, то не очкуй вернуть объект целиком. Никакого перемещения памяти не будет, будет та же передача по ссылке, только во владение

>from_le_bytes
Если знаешь свой ендиан и число байт точно чётное, то можешь через ансейф преобразовать Vec<u8> в Vec<u16>
Аноним 26/05/21 Срд 11:45:10 #104 №2043460 
>>2043306
GAT - generic associated types - https://github.com/rust-lang/rust/issues/44265
TAIT - type alias impl trait - https://github.com/rust-lang/rust/issues/63063

Вот пример для чего они нужны, чтобы иммитировать интерфейсы в жаве. Допустим у тебя есть интерфейсы.

public interface i1 {}
public interface i2 {
i1 getI1();
}

и их имплементации
public class i1Impl implements i1 {}
public class i2Impl implements i2 {
@Override
public i1 getI1() {
return new i1Impl();
}
}

Обрати внимание, что в интерфейсе i2 возвращается интерфейс i1, а не конкретный тип. Это очень распространённая идиома в жаве - использовать конкретные типы по-минимуму и совать где только можно интерфейсы. Вот аналог этого кода в расте: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=33fa415859772b050b8a8800c15ef2d7 в данном случае конечно можно не использовать TAIT и просто написать type getI1Rv = i1Impl; но иногда так сделать невозможно (например если внутри вызывается функция, которая сама возвращает impl i1. GAT нужны для того чтобы можно было использовать генерики и лайфтаймы в определениях типов в интерфейсах. Вот пример выше с использованием GAT: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=9740f54884bbf844039191d5003bc64a

Но как ты мог заметить, как GAT, так и TAIT в моих примерах используются как костыли и на самом деле нужны RPIT - return position impl trait внутри трейтов, чтобы тупо можно было написать fn getI1<'a, T: 'a>(&self) -> impl i1<'a, T>; внутри трейта, как это сейчас возможно в свободных функциях. Возможно позже добавят и такую возможность. Плюс это является необходимостью для использования асинхронных функций в трейтах.

Сейчас обычно эти ограничения обходят боксингом, т.е. последний пример выходит так: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=e0cec01ee4401c81867c71bc17017a3a но так получается медленней и иногда потребляет больше памяти.
Аноним 26/05/21 Срд 11:50:26 #105 №2043463 
>>2017017 (OP)
П
Аноним 26/05/21 Срд 17:49:44 #106 №2043967 
>>2043453
> Если не используешь многопоток и связные списки с деревьями, то правила очень простые
Да у меня практически классический пример: объект через интерфейс в виде трейта обращается к другому объекту. А трейт - вот уж случайность - оказывается родительским объектом. Всё.

> Если знаешь свой ендиан и число байт точно чётное, то можешь через ансейф преобразовать Vec<u8> в Vec<u16>
Вот конкретно этот пример с изменением типа массивов - один из самых больших пиздецов языка. Сишечка во всём небезопасная, конечно, но в ней байтоёбство естественное. В Расте же это - как деревенская пьянь, показывающая акробатический трюк.
Аноним 26/05/21 Срд 18:00:31 #107 №2044018 
>>2043460
Спасибо за разъяснения. Не стыжусь признаться, что часть про лайфтаймы понимаю смутно, но заскринил и скурю, как сам начну писать обобщённый код.
Аноним 26/05/21 Срд 18:01:12 #108 №2044019 
>>2043967
Объект трейта, конечно. Извиняюсь.
Аноним 26/05/21 Срд 18:41:59 #109 №2044113 
>>2043967
Ни хуя не понял, кто у тебя там к кому обращается. Дочерний объект зовёт метод родительского? Меняй архитектуру, если так. Используй каналы, асинхронность, ещё что-нибудь.
Крайне редко бывает, чтобы что-то подобное было вот ну прям необходимым, хотя в мире плюсов встречается сплошь и рядом. У тебя там, поди, коллбэк какой-нибудь?
Аноним 26/05/21 Срд 19:04:11 #110 №2044152 
>>2044113
Да, зовёт, чтобы получить нужное поле. Нет, всё збс, поле сделано как RefCell и не требует мутабельности родительского класса. Нужно это для более удобной организации кода: получение полей делается через dyn trait и им можно подставить или класс приложения, или класс тестраннера. Приложение импортирует все классы своих полей, классы полей - только классы соседей в месте с трейтами для их получения. Идиллия. Всё вместе это - зародыш движка игровой логики.
Аноним 26/05/21 Срд 22:53:34 #111 №2044351 
>>2044152
>Всё вместе это - зародыш движка игровой логики
Нет, блять, просто нет, сука, давно умные люди придумали ECS, никто даже в крестах не пишет на ебаных классах твои ебаные игры.
Просто нет, блять, игры так не делаются.

Но если очень надо взять референс из внутренней структуры на внешнюю, то смотри std::rc::Weak или std::sync::Weak. Но тебе не надо, тебе надо просто научиться использовать правильные алгоритмы и правильно структурировать программы под задачу.
Аноним 28/05/21 Птн 11:26:46 #112 №2046207 
Вот изучаю Rust и не могу понять: зачем они сделали все переменные константами? В чём смысл этого? Программа создаётся, чтобы преобразовывать данные, а значит переменные должны изменяться.
Такое ощущение, что разработчики руководствовались одноклеточной логикой с позиции каких-нибудь анализаторов кода: типа если большинство ошибок возникает из-за изменений переменной, то надо запретить изменять переменные.
Аноним 28/05/21 Птн 11:28:29 #113 №2046217 
>>2046207
Чтобы случайно не поменять то что не должно быть изменено
ты вобще дурак?
Аноним 28/05/21 Птн 14:48:34 #114 №2046513 
>>2046207
Ты перепутал раст с хачкелем, у нас мутабельность есть, а вот алиасинга нет.
Аноним 28/05/21 Птн 15:10:18 #115 №2046560 
>>2046207
Пчел, концепция вредоносности мутабельности по умолчанию это уже признанный стандарт — найди хоть один новый язык кроме gовна, где это не так.
Аноним 28/05/21 Птн 15:11:21 #116 №2046562 
>>2046207
Алсо, как иммутабельность по умолчанию тебе мешает преобразовывать данные?
Аноним 28/05/21 Птн 19:05:36 #117 №2046935 
Подскажите удобную IDE для Раста
Аноним 28/05/21 Птн 19:08:14 #118 №2046941 
>>2046935
VS Code + Rust Analyzer
Аноним 28/05/21 Птн 19:31:57 #119 №2047003 
>>2046935
Я idea пользуюсь, вроде удобно
Аноним 28/05/21 Птн 19:50:59 #120 №2047035 
>>2047003
Она же платная. Там 30 дней только пробный период, а мне надо инструмент на длительный период.
Аноним 28/05/21 Птн 19:56:07 #121 №2047040 
>>2047035
Комунити эдишн
Аноним 29/05/21 Суб 01:05:27 #122 №2047505 
>>2047035
Она 100 долларов в год стоит, ты серьёзно? Там даже можно не продлевать подписку если не хочешь, тогда ты сможешь её использовать, но без обновлений на новую версию.
Аноним 29/05/21 Суб 01:21:29 #123 №2047528 
>>2046935
Pycharm + rust плагин покрывает все потребности
Аноним 29/05/21 Суб 01:22:51 #124 №2047533 
>>2047528
Кроме отладки, которая доступна только в clion.
Аноним 29/05/21 Суб 01:29:29 #125 №2047552 
>>2047533
Отладчик тоже завезли. Не знаю, как в комьюнити версии, но в проф версии он точно есть.
Аноним 29/05/21 Суб 03:16:25 #126 №2047625 
>>2046935
вим
Аноним 29/05/21 Суб 08:59:43 #127 №2047672 
Если со стеком, любому, кто программировал на Ассемблере, всё понятно, то вот реализация кучи остаётся загадкой. О куче идёт много разговоров, но лично мне до сих пор не понятно, каким таким магическим образом нам динамически выделяют любой по размеру кусок памяти, а потом его освобождают. При этом утверждается, что освобожденный кусок также можно использовать.
Аноним 29/05/21 Суб 10:24:20 #128 №2047701 
>>1215536 (OP)
Щщщ>>2017017 (OP)
Гш78
Аноним 29/05/21 Суб 12:17:03 #129 №2047785 
>>2047672
Куча — это тупо массив битков, который аллокатором делится на нужные куски. Аллокатор в себе хранит данные о выделенных кусках, и когда ты освобождаешь аллокацию, аллокатор просто удаляет кусок из листа используемых, а когда выделяешь память, аллокатор ищет подходящий невыделенный кусок с помощью анализа уже выделенных кусков.

На самом деле там всё немного сложнее, конечно же, но основной принцип именно такой.
Аноним 29/05/21 Суб 12:29:21 #130 №2047789 
>>2047672
> каким таким магическим образом нам динамически выделяют любой по размеру кусок памяти
С точки зрения ОС ты просто вызываешь функцию аллокации памяти нужного размера и тебе даётся указатель на массив байтов, после чего вызываешь функцию деаллокации передавая ей указатель, который дала тебе функция аллокации. Но обычно апи ОС напрямую использует только аллокатор (потому что сама аллокация памяти - достаточно долгий процесс и лучше взять памяти побольше и потом постепенно использовать) - специальная библиотека, которая выделяет память для твоих объектов в куче. А там уже сколько памяти брать, как объекты внутри распределять - зависит от самого аллокатора (потому их так и дохуя и универсального как бы и нет).
Аноним 29/05/21 Суб 13:45:01 #131 №2047849 
Если я написал программу, которая не выходит за границы массива и работает корректно, то почему я должен платить за дополнительные проверки на границы массива во время выполнения, которые снижают производительность?
Аноним 29/05/21 Суб 13:51:45 #132 №2047861 
>>2047849
Ну вообще компилятор проверки и не суёт, если во время компиляции твёрдо и чётко видит, что за границы массива ничего не выходит. Однако видит не всегда.
Аноним 29/05/21 Суб 14:27:13 #133 №2047922 
>>2047849
Потому что ты не умеешь использовать итераторы, как вариант. Или потому что ты не смог убедить компилятор в ненужности проверок с помощью сейф кода.
Аноним 29/05/21 Суб 18:14:35 #134 №2048253 
Стикер
>>2047849
Аноним 29/05/21 Суб 19:02:27 #135 №2048303 
>>2046941
>>2047040
Кстати попробовал. Обе IDE рабочие. Правда в VS Code надо самому писать все эти cargo build и прочее. Автоматизации нет.
А вот IntelliJ IDEA приятно удивила, что достаточно поставить плагин и работаешь как-будто среда затачивалась под Раст. Всё собирается просто по кнопочке.
Аноним 29/05/21 Суб 19:08:54 #136 №2048312 
>>2048303
В vscode можно также запилить на кнопочку
Тока хзы как, мне вполне удобно в консоли все делать
Аноним 29/05/21 Суб 19:30:04 #137 №2048339 
https://github.com/systemd/systemd/pull/19598
systemd - ключевой компонент всех популярных дистров линукса, и теперь туда пытается проползти раст, что его неминуемо обессмертит.
Раст идёт к успеху!
Аноним 30/05/21 Вск 18:35:55 #138 №2049575 
Суп, расты. Начал изучать работу с файлами, не могу вкурить как переписать кусок файла без создания нового и копирования в него со смещением. Можете помочь примером?
Аноним 30/05/21 Вск 20:05:28 #139 №2049716 
>>2049575
Описание std::io::Seek прочитай. И то, как оно заимплеменчено для файлов.
Аноним 30/05/21 Вск 20:10:11 #140 №2049725 
>>2049716
>std::io::Seek
fn main() -> io::Result<()> {
let mut f = File::open("foo.txt")?;

// move the cursor 42 bytes from the start of the file
f.seek(SeekFrom::Start(42))?;
Ok(())
}

Это прочитает 42 байта или начнёт читать с 42 байта? Я прочитал коммент на английском, но туповат немного.
Аноним 30/05/21 Вск 20:18:56 #141 №2049748 
>>2049725
Это передвинет курсор в файле на 42 байт со старта. Дальше жмёшь std::io::Read или std::io::Write, чтобы читать или писать начиная с 42 байта в файле.
Аноним 30/05/21 Вск 23:23:42 #142 №2050006 
>>2049748
Понял, спасибо. Но мне наоборот надо, с 0 до 42 байта.
Аноним 31/05/21 Пнд 01:21:23 #143 №2050079 
>>2050006
https://stackoverflow.com/questions/30412521/how-to-read-a-specific-number-of-bytes-from-a-stream
Аноним 31/05/21 Пнд 10:58:02 #144 №2050251 
>>2050006
Тебе же надо было переписать кусок файла, нет?
Прочитать первые 42 байта — это элементарнейшая херня, делается через

let buf = &mut [0_u8; 42];
let r = std::io::Read::read(reader, buf)?;

Правда в файле может быть меньше 42 байтов, так что по хорошему надо ещё сделать так:

let bytes_read = &buf[..r];
Аноним 31/05/21 Пнд 11:41:53 #145 №2050308 
>>2050251
>Тебе же надо было переписать кусок файла, нет?
Да, переписать. С чтением я понял, получилось с буфером нужного размера, спасибо.

И ещё вопрос, допустим у меня есть
> let buf2 = &mut [0_u8; 84];
Я могу как-то записать его в начало файла, но так, чтобы:
1) первые 42 байта заменились, то есть 43 байт стал 85-м
2) без копирования во временный файл
С временным файлом я разобрался, принцип тот же, что и выше - используя Seek::Start и дописать в нужный файл с OpenOptions::new().write(true).append(true)
Аноним 31/05/21 Пнд 12:10:51 #146 №2050348 
В общем, я даже нашел либу для подобного, но хочу разобраться как оно работает.
Аноним 31/05/21 Пнд 23:06:23 #147 №2051339 
>>2050308
Нет, не можешь, разное же количество байтов. Вообще, в теории есть варианты, но проще всего именно записать в новый файл, а потом этим файлом заменить старый. Это и проще и надёжнее.
Аноним 01/06/21 Втр 12:30:47 #148 №2051726 
>>2051339
Понял. Но просто в начало файла я могу же дописать?
Аноним 01/06/21 Втр 13:13:49 #149 №2051783 
>>2051726
Нет, не можешь, только перезаписать байты в начале файла. Думай о файле как о векторе: дописать в конец ты можешь, а вот чтобы дописать в начало, тебе сперва надо весь вектор сдвинуть.
Аноним 03/06/21 Чтв 17:32:08 #150 №2055226 
>>2051783
фон Нейман ебучий заруинил запись в начало файла
Аноним 04/06/21 Птн 12:04:36 #151 №2056103 
Вопрос тем, кто пишет на расте не системщину: почему вы не пишете на стабильном языке со сборщиком мусора? Чем вам go не угодил?
Аноним 04/06/21 Птн 12:38:42 #152 №2056158 DELETED
>>2017017 (OP)
Как зумеры изменят Россию?

https://2ch.hk/po/res/43508970.html

Зумеры неспособны читать книги и даже лонгриды, их предел — пост в Фейсбуке на 500 символов. Страшно будет жить в мире, где кардиохирургами, нейрохирургами, авиаконструкторами и проектировщиками АЭС будут зумеры. А вам было бы не страшно лечь под нож на операцию, которую будет делать вам врач-зумер, воспитанный не на чтении толстых медицинских книг по 900 страниц, а не коротких твиттерных постах и Ютуб-стримах? Для зумеров толстые книги — это "занудно" и "душно", они живут под лозунгом "Не парься, миллениал, ты — душнила, зануда, не бери в голову, живи без задней мысли, расслабься, миллениал".

Получатся ли из зумеров хорошие программисты, инженеры? Что в скажете про поколение с годами рождения 1997 — 2012? Хороши ли они в Расте?
Аноним 04/06/21 Птн 12:49:20 #153 №2056182 
р
Аноним 04/06/21 Птн 12:52:00 #154 №2056189 
>>2056158
Зря ты дрочишь на СССР. Там было плохо https://2ch.hk/ussr/res/90446.html
Аноним 05/06/21 Суб 08:52:24 #155 №2057605 
Аноны, тут ВБ ищет растовика - собираются внедрять цифровой ГУЛАГ на складах и пишут самопальную замену CEPH. Удалёнщики также вэлкам. Я особеседовал, но они меня, скорее всего на хуй пошлют. Попробуйте и вы.
Суть: сидят 2 задрота-экс-плюсовика и дрючат тебя на знание алгоритмов и списков в рот я это всё ебал. Говорю, да вот же, терминал торговый написал, приложение камеры поверх NDK - не, им это всё похуй, им алгоритмы давай. Может кто-то из вас найдёт с ними общий язык, я хз. Ещё спрашивали, какая у меня любимая книга, ну, я, короч, неправильно ответил, надо что-то по алгоритмам чтоб было.
Аноним 05/06/21 Суб 12:52:32 #156 №2057815 
>>2056103
Медленно, тормозит, сам Го как язык лютая хуита. Мне больше котлин понравился как джава, только нормальный, но он работает на JVM, а она тоже медленная.
Аноним 05/06/21 Суб 16:33:51 #157 №2058023 
>>2057815
>Медленно

Если сравнивать не на синтетических тестах, а на реальных задачах, то разница в скорости не заметна. Реально заметна на глаз только скорость компиляции - у go гораздо быстрее проекты собираются.
Аноним 05/06/21 Суб 16:51:19 #158 №2058048 
>>2058023
Орнул с вебмакаки.
Аноним 06/06/21 Вск 05:25:09 #159 №2058777 
Уважаемые растоманы, как вы пришли к расту? Что вас побудило начать писать на нем? Допустим, почему я должен перейти с условных плюсов на ржавого? Стоит ли вкатываться?
Аноним 06/06/21 Вск 07:32:05 #160 №2058794 
>>2058777
Заебал питон с его недотипизацией и тормозами.
Заебали си/плюсы с их ебучими сегфолтами в самых неожиданных местах, которые поди ещё поотлаживай.

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

С другой стороны, если ты с плюсами на "ты", тебя в них прям вот всё устраивает, пишешь ты, аки святой Кармак, то может именно тебе и не надо. За растом будущее как раз ещё по той причине, что он удобен бизнесу - в реальном мире, где далеко не все прогеры кармаки, он позволяет отсечь плохой код (и, возможно, плохих кодеров) ещё на этапе компиляции.
Аноним 06/06/21 Вск 11:20:50 #161 №2058873 
>>2058023
Если "реальные задачи" в твоём понимании это отдать html страницу из кэша - то да, тут разницы не заметно. А если нужно делать что-то сложное при этом не умирать и не тормозить при очень большой нагрузке, тут твоё го уже не справляется.
Аноним 08/06/21 Втр 10:08:01 #162 №2061395 
>>2058777
Начал принимать лоли-колёса и становиться настоящей девочкой.
Аноним 09/06/21 Срд 11:09:19 #163 №2062777 
>>2058777
Раньше писали на работе медиапроект на Си. Я чет по-рофлу решил глянуть на раст.
Так и началось.
В итоге весь проект переполз на раст. Написали бинды к ffmpeg'у\gstreamr'у. Сидим, кайфуем. Писать кодяру - быстрее, зависимости тянуть - просто, распиливать проект на сабмодули - просто, сегфолтов нет, перфоманс тот же самый.
В итоге, уже запилили стриминг-платформу и плеер без единого сегфолта, лол. Сейчас допиливаем метрики и апишку внешнюю.
Аноним 10/06/21 Чтв 00:32:50 #164 №2063844 
ftPNFHVCTCqL8t3QcUH9bg.jpg
Аноним 10/06/21 Чтв 08:24:03 #165 №2063938 
>>2063844
Да, возможно рановато ещё расту в ядро. Но эта проблема давно известна и потихоньку пилится

https://rust-lang.github.io/rfcs/2116-alloc-me-maybe.html
https://www.crowdstrike.com/blog/dealing-with-out-of-memory-conditions-in-rust/
https://github.com/rust-lang/rust/issues/48043

возможно сейчас, после линусового пендаля, будет пилиться активнее. Для обычных же приложений, вне ядра, вылет в случае нехватки памяти - ну это не самое страшное, что может случиться, раз уже ты столкнулся с этой самой нехваткой.
Аноним 10/06/21 Чтв 08:55:41 #166 №2063947 DELETED
>>2017017 (OP)
Вот так живут нормальные программисты
https://citizen1980.livejournal.com/310.html

Цитата.
И вот в таком коттедже, как на картинке 18, сидит больной кифозом человек, стучит пальцами по клавиатуре, пишет, к примеру, код на Scala/Java/Erlang или схемы на VHDL, продаёт свою экспертизу в Австралии/США/Канаде и привлекает в свой карман доллары, не желая переезжать из провинциального миллионника в Калифорнию.

Потому что жизнь в Калифорнии — это когда инженер за год заработал, условно говоря, $110 тыс., а потратил на всё $105 тыс. Строго формально он зарабатывает ежегодно больше, чем тратит, и разница копится год за годом, но фактически это издевательство. Зачастую для удобства продажи экспертизы обитатель такого коттеджа не позиционирует себя как физическое лицо, а учреждает в любой из юрисдикций общего права юрлицо, в этой же или другой с common law заводит счёт, регистрирует корпоративный домен второго уровня с почтовым ящиком, создаёт сайт юрлица и минимальный substance, вот прямо совсем минимальный, и взаимодействует со своими контрагентами из Австралии/США/Канады от имени своего юрлица (КИК), самостоятельно формулируя тексты контрактов и в итоге пользуясь преимуществом разницы глобальных денег и местных провинциальных услуг по ППС. Да, таких людей в России мало, средний класс — всего 1 % населения. Наугад взятый программист не владеет коттеджем, потому что на рынок пришло слишком много некомпетентных людей беднеющей страны.

Нужно сказать, что, наверное, больше половины программистов в России не входят в средний класс. Причин много. У кого-то нет амбиций для того, чтобы в частном порядке начать продавать свою экспертизу, именно экспертизу, а не часы работы. У кого-то убогий английский не позволяет проявить инициативу и начать зарабатывать деньги в формате кооперации в глобальной распределённой команде разработчиков или начать продавать собственные разработки как закрытые компоненты, устройства, сервисы. А кому-то управленцы ранее смогли внушить, что самостоятельно находить контрагентов, устанавливать с юрлицами именно деловые отношения, а не отношения найма, составлять и подписывать контракты (fixed-price, time and materials, cost-plus) в формате B2B и управлять своими проектами якобы невозможно. Судьба программистов, которые не захотели или не смогли войти в класс "Средний класс", — это продолжать находиться в классе "Слегка зажиточные". Удел не вписавшихся в рынок экспертизы — работать на рынке труда и участвовать в аутсорсинге или аутстаффинге, работодатель таких россиян — так называемый "бодишоп" (так называемая "галера"). Ошибочно думать, что российская галера покупает человеко-часы программистов в России и просто втридорога продаёт их толстосумам из SoftBank Group или подобных денежных мешков, так как чаще всего в цепочке между сверхбогатыми инвесторами и программистами находится намного более одного посредника, к каждому из которых прилипают доллары, и накрутка там уже не в три раза получается. При Дмитрии Медведеве провинциальный рынок был примерно таким: студент получал $350 в месяц, младший программист — $750, средний — $1,5 тыс., старший — $3 тыс. Сейчас, при Обнулёныше, ситуация иная: студент работает за еду в буквальном смысле слова (в провинции на галере дают бесплатный чай с печеньями, не более того), младший — $350 (конкурс гигантский, резюме не читают), средний — $750 (тоже длинная очередь и дикая конкуренция). Старшие не подешевели, а даже подорожали, но их мало. Из этого нужно сделать вывод, что рынку в 2021 году не нужны уже не только начинающие специалисты, но и даже посредственные, среднего ума, эрудиции и опыта. Но ведь это логично: например, когда у вас разболелся зуб, вы стремитесь записаться именно к хорошему специалисту, а не к посредственному стоматологу, верно? Так почему же на рынке разработки hardware и software должно быть иначе в 2021 году?
Аноним 10/06/21 Чтв 09:10:58 #167 №2063954 
>>2063947
вода с претензией на сурьезность
Аноним 10/06/21 Чтв 15:23:56 #168 №2064325 
У вас https://crates.io/ через браузер palemoon тоже не работает? На зеленом фоне пишет "sorry...."
Аноним 10/06/21 Чтв 20:15:38 #169 №2064606 
>>2063954
Это паста, пчел.
Аноним 10/06/21 Чтв 21:43:20 #170 №2064669 
Раньше упарывался по чистым сям и винапи.
В расте можно под винду писать?
Аноним 11/06/21 Птн 00:20:44 #171 №2064866 
>>2064669
Да. Есть winapi биндинги, если тебе это нужно.
Аноним 11/06/21 Птн 08:25:12 #172 №2065035 
Недавно вышла первая стабильная версия языка программирования crystal https://crystal-lang.org/
Синтаксис как у ruby, а скорость как у C.
Аноним 11/06/21 Птн 09:20:58 #173 №2065054 
>>2064866
Есть ещё https://github.com/microsoft/windows-rs

Там помимо винапи есть ещё и другие более современные апи.
Аноним 11/06/21 Птн 10:36:40 #174 №2065100 
>>2065035
А нужность как у брейнфака.
Аноним 11/06/21 Птн 19:34:13 #175 №2065719 
>>2065100
Не пизди, брейнфак охуительно нужен как эталон эзотерических ЯП. А crystal этот никому нахуй не нужен кроме рубидрочеров, которые со своим ООП могут пойти на хуй.
Аноним 11/06/21 Птн 19:40:06 #176 №2065725 DELETED
83394229188320.jpg
>>2017017 (OP) >>2017023 >>2017147 >>2017148 >>2017168 >>2017187 >>2017207 >>2017636 >>2018191 >>2018201 >>2018946 >>2018982 >>2019057 >>2019689 >>2019775 >>2019776 >>2021055 >>2021152 >>2022769 >>2022900 >>2022939 >>2023220 >>2024364 >>2024367 >>2026136 >>2026171 >>2026180 >>2026198 >>2026221 >>2026348
Haпиши библиотeку, нaпиши ось. Ты eщё и в плюсотрeдe срёшь?
Аноним 12/06/21 Суб 12:53:46 #177 №2066128 
rust небезопасен из-за дырявого llvm
Аноним 12/06/21 Суб 23:12:15 #178 №2066637 
>>2066128
Открой ишшуи в репе раста и загугли I-unsound. Но это вовсе не отменяет того, что раст намного безопаснее и удобнее крестов или сишки.
Аноним 14/06/21 Пнд 01:35:16 #179 №2067546 
image.png
Читаю книжку.
В 12 главе (где пишешь свой плохонький греп) предлагают написать юниттесты к функции, которая парсит аргументы командной строки.
>Feel free to write some tests for the functionality in the Config::new and run functions on your own.
В этой главе агрументы были сделаны в виде массива строк, соответсвенно, юниттест был лёгкий.

В следующей главе поменяли массив строк на итератор std::env::Args. Как теперь юниттест-то написать? Пробовал банальное
let cmd = vec![String::from("binary"), String::from("needle"), String::from("haystack"),] as std::env::Args;
Но это "non-primitive cast"

Как быть?
Аноним 14/06/21 Пнд 03:43:11 #180 №2067561 DELETED
26626007345660.jpg
>>2017017 (OP) >>2017023 >>2017147 >>2017148 >>2017168 >>2017187 >>2017207 >>2017636 >>2018191 >>2018201 >>2018946 >>2018982 >>2019057 >>2019689 >>2019775 >>2019776 >>2021055 >>2021152 >>2022769 >>2022900 >>2022939 >>2023220 >>2024364 >>2024367 >>2026136 >>2026171 >>2026180 >>2026198 >>2026221 >>2026348
Pycharm + rust плaгин пoкpывaет все пoтpебнoсти
Аноним 14/06/21 Пнд 13:49:38 #181 №2067766 
>>2067546
Запедаль свой итератор, очевидно же.
Аноним 14/06/21 Пнд 22:01:17 #182 №2068312 
>>2067766
В смысле?

А, виноват, не всё скопировал. Уже делал
vec![String::from("binary"), String::from("needle"), String::from("haystack"),].iter() и добавлять as std::env::Args тоже пробовал;
Потом даже переделал в let cmd = ["binary", "needle", "haystack"].iter().map(|s| s.to_string()); чтобы почище

Он уже был итератором, в общем. Проблема в том, что он не был std::env::Args. И никакого способа сконструировать руками std::env::Args я не нашёл.
Аноним 15/06/21 Втр 09:32:56 #183 №2068655 
image.png
>>2068312
Почему бы тебе не воспользоваться дженериками?
Аноним 15/06/21 Втр 21:05:46 #184 №2069535 
image.png
>>2068655
Да, таки сделал в итоге. Точнее, вынес в отдельную функцию
Config::parse(mut args: impl Iterator<Item = String>) -> Result<Config, &'static str>
а так и оставил как в примере в книжке
Config::new(args: std::env::Args)
она теперь просто вызывает более общую приватную. На неё юниттест и запускаю.
Аноним 15/06/21 Втр 21:30:35 #185 №2069552 
>>2069535
>таки
так и
Аноним 17/06/21 Чтв 10:06:20 #186 №2070982 
Как правильно хендлить some().unwrap()?
Аноним 17/06/21 Чтв 11:11:21 #187 №2071030 
тут узнал что диабло2 есть на go https://github.com/OpenDiablo2/OpenDiablo2
а какие крутые игры есть на расте?
Аноним 17/06/21 Чтв 11:19:28 #188 №2071045 
>>2071030
veloren же
Аноним 17/06/21 Чтв 12:05:34 #189 №2071094 
Допустим, я - миллиардер. Стоит ли вкладывать деньги в создание игрового движка на расте для ААА-игр? Как это окупится?
Аноним 17/06/21 Чтв 12:13:41 #190 №2071107 
>>2071094
Делай гачу на анрыле и не выёбывайся.
Аноним 17/06/21 Чтв 12:44:06 #191 №2071153 
>>2070982
Через unwrap_or_else()
Через if let
Через match
Аноним 17/06/21 Чтв 12:59:35 #192 №2071177 
>>2071094
И что выгоднее: продавать такой движок другим компаниям или организовать свою студию по производству игр, которая будет его эксклюзивно использовать, пользуясь всеми преимуществами раста?
Аноним 17/06/21 Чтв 13:02:43 #193 №2071181 
>>2071107
Тогда у меня точно не будет никаких конкурентных преимуществ.
Аноним 17/06/21 Чтв 13:05:01 #194 №2071184 
>>2071181
Будто гей-мерам не похуй какой язык у тебя там в двигле используется.
Аноним 17/06/21 Чтв 13:37:39 #195 №2071217 
>>2071184
Для них достаточно того факта, что они будут покупать ААА-игры по меньшей цене благодаря расту.
Аноним 17/06/21 Чтв 17:07:37 #196 №2071492 
Кто все ещё свои движки продолжает писать?
Аноним 17/06/21 Чтв 23:52:58 #197 №2071914 
>>2071492
Все, у кого:
а) Есть свои наработки;
б) Есть хотелки которые имея деньги легче реализовать инхаус, чем ждать что когда-то реализуют в унылэнджайне/хуюнити.
Аноним 18/06/21 Птн 06:38:20 #198 №2072045 
>>2071217
Так не бывает. Цена будет та же, чтобы твоя прибыль была больше. Геймер же в любом случае проигрывает, поэтому игры покупают только тупые лохи.
Аноним 18/06/21 Птн 14:24:03 #199 №2072389 
1624015439293.jpg
1624015439313.jpg
Всё чаще на ххсру натыкаюсь на вакансии, в которых нужен рист.
Хотя ещё год назад не было вообще ни одной

https://hh.ru/vacancy/45212753
Аноним 18/06/21 Птн 14:34:35 #200 №2072405 
Когда уже будем писать фронт на расте, аноны?
Аноним 18/06/21 Птн 14:47:40 #201 №2072426 
>>2072389
клоуны. нахрен там раст, если все либы по cv это питовские интерфесы к плюсовым либам
Аноним 18/06/21 Птн 14:49:04 #202 №2072428 
>>2072405
Yew давно уже есть, но он не перформит.
Аноним 18/06/21 Птн 15:08:02 #203 №2072459 
>>2072426
Тебя ебёт?
Если бабло платят то не похуй ли?
Аноним 19/06/21 Суб 05:28:10 #204 №2073275 
>>2043303
> (кстати, турбо паскаль от 1989 года под дос не мог без мэдскиллз делать бинарники меньше 7кб).
Зато они запускались и без дос тупо загрузчиком.
Аноним 19/06/21 Суб 16:29:30 #205 №2073701 
>>2041230
>#[no_std]
https://doc.rust-lang.org/1.7.0/book/no-stdlib.html
+
>[profile.release]
>lto = true
+
проследи, не линкуется ли какой нибудь libc и прочая хуйня, и получишь свой голый бинарь размером с твой хуй.
Аноним 19/06/21 Суб 18:54:12 #206 №2073817 
>>2073701
Удачи скомпилить hello-world без libc ЛОЛ.
Аноним 19/06/21 Суб 18:55:20 #207 №2073819 
>>2072426
Клоун как раз ты, раз полагаешься только на готовые библиотеки. Профи пишут под задачу оптимизированный код. Представь себе, нейронки и компьютерное зрение под силу написать даже в одиночку. Тем более, распознавание лиц не такая сложная задача.
Аноним 20/06/21 Вск 02:21:38 #208 №2074150 
>>2073819
Чмо, твоя маня реализация CNN, которую действительно можно написать в соло за пару дней, будет сосать в производительности, возможностях, удобстве использования либам, которые пишутся, выилизываются и оптимизируются уже лет 10 на плюсах.

И никто в здравом уме не будет переписывать это на расте.
Аноним 20/06/21 Вск 06:54:04 #209 №2074183 
>>2074150
1. Чел, ты видишь плюсы там где их нет.
2. Нейронки и прочее считают на кудах и опенцл, за редкими исключениями. Зачастую через удобные интерфейсы вроде тензорфлова.
3. Numpy это вначале фортран а затем сишная обёртка.

Так что выпей антиплюсин.
Аноним 20/06/21 Вск 07:10:10 #210 №2074187 
>>2074183
>опенцл
>кудах
>Чел, ты видишь плюсы там где их нет.
Обосрался с этого знатока.
мимо
Аноним 20/06/21 Вск 07:38:42 #211 №2074195 
>>2074187
Ну иди теперь штаны стирай, засранец.
Аноним 20/06/21 Вск 10:28:03 #212 №2074244 
>>2074150
Практика показывает обратное. Ты слишком возомнил себе, будто нейронки это что-то сверхсложное, но это не так.
Аноним 20/06/21 Вск 12:00:20 #213 №2074303 
Гугл спонсирует внедрение раста в ядро линукс https://www.memorysafety.org/blog/supporting-miguel-ojeda-rust-in-linux/

Если нанятый программист не подведет, то все драйвера для линукса будут писать на расте.
Аноним 20/06/21 Вск 18:51:25 #214 №2074728 
>>2057605
Как в итоге с фидбеком вышло?

И что там за задания/вопросы были, коли не секрет?
Аноним 20/06/21 Вск 20:01:49 #215 №2074849 
>>2026136
Обычный тупой маркетинг, что ты так подорвался?
Аноним 20/06/21 Вск 21:16:26 #216 №2074946 
>>2017017 (OP)
Почему Rust ассоциируют с трапами? Много известных rust-кодеров трапы или в команде разработки самого языка много трпаов?
Аноним 20/06/21 Вск 23:23:33 #217 №2075116 
>>2074946
Была история, что на него несколько больших аэропортов свой внутренний софт переписали, отсюда и повелось.
Аноним 21/06/21 Пнд 02:50:00 #218 №2075228 
>>2074946
Смотрел в прошлом году RustConf одним глазком - половина презентеров была трапчанские
Аноним 21/06/21 Пнд 09:05:33 #219 №2075306 
>>2074946
Чтобы тебя привлечь.
Аноним 21/06/21 Пнд 09:31:28 #220 №2075315 
>>2074946
Ну смотри, программирование как деятельность в целом – само по себе для девиантов, тех, кто вместо "человек - человек" предпочитает "человек - машина". У нас такие тесты были в школе, на определение будущего проф направления, ну и классы были тоже с "уклоном", я был типа в техническом. Так вот, Раст в этом плане - один из наиболее сложных ЯПов, соответственно, привлекает наиболее отклоняющихся от "нормы" индивидуумов.
Ну и второе - это их такая самореализация и самобичевание. Типа, смотрите, вот натуралы и прочие нормисы не могут прогать на этом нечитаемом говне, а мы смогли, смогли-и-и!
Ну и времени свободного у них видимо дохуя, на вечеринки и другие активности нормисов-то не зовут. Вот и сбиваются в кучки по интересам, а там как снежный ком и диаспоры за рубежом - свои тянут своих.
sageАноним 21/06/21 Пнд 12:03:10 #221 №2075456 
>>2075228

Ты смотрел cppcon? Там тоже есть трансы. один из https://github.com/TartanLLama

>>2074946
>>2075315

Привлечение меньшинств в разработку это буквально цель раста
https://blog.rust-lang.org/2017/06/27/Increasing-Rusts-Reach.html
>Some groups that are underrepresented in technology and in the Rust community that we would especially love insights from include women (cis & trans), nonbinary folks, people of color, non-native English speakers, people who learned programming later in life (older, or only in college, or at a bootcamp as part of a midlife career change), people with disabilities, or people who have different learning styles.

>>2075315

>вот натуралы и прочие нормисы не могут прогать на этом нечитаемом говне
Согласно https://blog.rust-lang.org/2018/11/27/Rust-survey-2018.html#feeling-welcome 92% это, скорее всего, обычные люди.
Аноним 21/06/21 Пнд 14:56:32 #222 №2075763 
>>2075315
>Раст
>один из наиболее сложных

Легкотня по сравнению с задротской связкой cmake & autotools & с/c++
Все самые известные растоманы - это вебмакаки, перешедшие с умирающего ruby. Твои любимые трапы тоже оттуда перекатились.
Аноним 21/06/21 Пнд 16:27:34 #223 №2075912 
>>2074946
Пидоры зохватили язык. Буквально. Сменили некоторые из должностей, начали визжать и кукарекать. Потом пропихивать себя же на различные посты. Потом уже все стали пидорами вокруг, в итоге язык уже год как пидераст.

>>2075315
> Раст в этом плане - один из наиболее сложных ЯПов
Только для трапов и пидоров.
Аноним 21/06/21 Пнд 16:34:51 #224 №2075927 
>>2075763
Кстати, ruby тот ещё загон закрытый клуб.
Зачем это дерьмо использовали для написания нескольких крутых продуктов - мне непонятно. Наверное потому что в те годы питон не был настолько крут, а энтерпрайз языки были уже слишком унылы и не модны.
Аноним 21/06/21 Пнд 17:36:18 #225 №2076049 
>>2063938
Кто ядру будет выделять память? Разве это не задача самого ядра менеджерить память?
Аноним 21/06/21 Пнд 17:40:32 #226 №2076065 
Если в программировании возникает много ошибок при работе с динамическим выделением памяти, то почему Раст не запрещает динамическое выделение памяти? Вот просто убрать это всё из языка и тогда программы станут надёжнее.
Аноним 21/06/21 Пнд 17:43:05 #227 №2076069 
>>2076049
Вот с эти проблем у раста нет. Там можно определить специальные функции (аллокатор) которые будут вызываться, если нужно немного памяти. Проблемы начинаются если памяти не хватает. Аллокатор в этом случае возвращает ошибку, но куча мест в стандартной библиотеке на эту ошибку реагирует паникой, а нужно просто передавать эту же ошибку коду выше. Сейчас самый большой перепил и идёт в этом направлении - добавить fallible-аналоги для всех infallible-функций и добавить какую-нибудь конфигурацию, при активации которой все infallible-функции будут недоступны.
Аноним 21/06/21 Пнд 18:23:04 #228 №2076170 
Проблема всех новых языков как правило в том, что они замкнуты сами в себе. Можно бесконечно до хрипоты доказывать, что в любимом языке максимально эффективно перегоняются байтики, но всё это становится бесполезной математической задачей без возможностей ввода/вывода. Вот какой ввод/вывод имеется в Rust кроме консоли?
Аноним 21/06/21 Пнд 20:02:21 #229 №2076366 
1624294940404.mp4
>>2076170
Откуда вы лезете блять
Аноним 21/06/21 Пнд 20:10:17 #230 №2076374 
>>2076366
Типа на С++ написаны все либы и надо через них всё делать?
Аноним 21/06/21 Пнд 20:22:11 #231 №2076389 
>>2076374
Да делай что хочешь, хоть эти либы сам перепиши
Аноним 21/06/21 Пнд 20:30:10 #232 №2076404 
>>2076389
Как я перепишу системные либы?
Аноним 21/06/21 Пнд 20:56:25 #233 №2076452 
16236865907210.mp4
>>2076404
Аноним 21/06/21 Пнд 21:15:18 #234 №2076466 
>>2076452
Почему разработчики выкатывают свой язык, но не пишут к нему либы для ввода/вывода типа Qt?
Аноним 21/06/21 Пнд 23:00:42 #235 №2076566 
>>2076466
Потому что десктоп мертв?
Аноним 22/06/21 Втр 00:44:15 #236 №2076630 
>>2076466
А нафиг им это нужно? Они захотели сделать язык и компилятор и сделали. К слову, разработчики большинства других языков или компиляторов поступают точно так же. Думаешь авторы C++ или GCC написали Qt? Нет. К слову, для Rust куча библиотек для GUI есть. Ты видимо не искал или плохо искал.
Аноним 22/06/21 Втр 00:48:38 #237 №2076633 
>>2076466
https://github.com/rust-unofficial/awesome-rust#gui
Аноним 22/06/21 Втр 16:20:39 #238 №2077116 
>>2073817
Динамическую линковку в школе ещё не проходили чтоле, м?

Ясен хуй, что без него мало что заработает, просто сейчас явно не то время, когда кто-то будет терпеть все анальные боли и версионированием и деплоем ради 2 мб на диске.
sageАноним 22/06/21 Втр 19:49:29 #239 №2077293 
>>2077116
Школьник ты. Во-первых, чтобы статически слинковать libc в расте надо знатно поебаться, он там по дефолту линкуется динамически. Во-вторых, hello-world в расте это что? 'println!("Hello, world!");'. Вот удачи тебе собрать это с no_std.
Аноним 23/06/21 Срд 00:31:23 #240 №2077493 
>>2017017 (OP)
Насколько RUST пидорский? Go пидорский настолько, что сует плашку фашистов BLM себе на офф сайт. У раста офф сайт без этого говна. Но и тут есть CoCk

We are committed to providing a friendly, safe and welcoming environment for all, regardless of level of experience, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, nationality, or other similar characteristic.
Please avoid using overtly sexual aliases or other nicknames that might detract from a friendly, safe and welcoming environment for all.


Короче хуйня ебаная. ЯП для соидевочек. Или стоит дать ему шанс? Хочу писать системный софт. C++ говно, C# не позволяет религия, JVM говно ебаное. Один выход Си, но Си это ебанутый друг, который вечно обдолбан чем-то и внезапно схватил твои яйца и любое неверное слово и ты нахуй их лишишься.

Какой язык вообще сегодня не пидорский\сжвшный\левацкий\etc? Самый хуйовый в этом плане JS, - куча куколдов на нем пишут. Python окуколдивается. Вы там ебанулись? Мне на асме писать, а?
Аноним 23/06/21 Срд 00:47:38 #241 №2077495 
>>2077493
Чем более хайповый, тем более пидорский, потому что пидоры лезут где больше аудитория и орут громче всех. Очевидно же.
Аноним 23/06/21 Срд 00:51:20 #242 №2077498 
>>2077495
Конечно. Поэтому я поначалу и решил, будто раст оплот чистоплотности и праведности. Но при чуть более глубоком ознакомлении понял, что был создан геями для геев, чтобы дать пососать таким же геям, но только из гугла
Аноним 23/06/21 Срд 01:18:37 #243 №2077507 
>>2077493
>выбирает язык по отсутствию интереса у группы людей к языку
>что-то пиздит
Удачи, кек.
Аноним 23/06/21 Срд 01:41:46 #244 №2077512 
>>2077507
Пидорам не нравится, что в питоне есть слова master и slave
@
Угнетение ко ко ко
@
Левацкий скам, именуемый разработчиками прогибается
@
Теперь это parent и child
@
Твой говнософт теперь надо переделывать, чтобы он заработал
@
Странно, но у других разработчиков тоже дохуя что отваливается
Аноним 23/06/21 Срд 08:44:26 #245 №2077596 
>>2075912
Это ты в комментах на опеннете пишешь "PedeRust"?
Аноним 23/06/21 Срд 08:56:12 #246 №2077601 
>>2076630
Разработчики С написали UNIX.
Аноним 23/06/21 Срд 09:07:58 #247 №2077605 
>>2077596
А тебе неприятно, педераст?
Аноним 23/06/21 Срд 09:27:37 #248 №2077610 
>>2077512
> Левацкий скам
Но ЛГБТ и БЛМ-Slave это же правые.
Аноним 23/06/21 Срд 10:24:21 #249 №2077616 
>>2077293
>Во-вторых, hello-world в расте это что? 'println!("Hello, world!");'. Вот удачи тебе собрать это с no_std.
Hello world в расте (и любом языке) это программа, пишущая эту фразу любым доступным методом. Дёрнуть себя за хуй printf тебе никто не мешает.
Аноним 23/06/21 Срд 10:42:25 #250 №2077622 
>>2077616
>printf
Опять ты в libc лезешь, она же тебя сожрет. Предложил бы хоть системный вызов для приличия дернуть.
Аноним 23/06/21 Срд 11:28:49 #251 №2077639 
>>2077616
Почему в стандартные библиотеки не добавляют функций типа: create_window() или putpixel(x,y,color)?
Аноним 23/06/21 Срд 12:30:42 #252 №2077704 
>>2077601
И много там графики было?
Аноним 23/06/21 Срд 12:34:27 #253 №2077710 
>>2077704
В те времена ещё не разработали графические интерфейсы пользователя и даже просто работа в консоли с живой ЭВМ - было супер-круто. Напомню, что до этого делали колоду перфокарт, которую считывал какой-нибудь простенький комп и формировал задание на магнитной ленте для большой ЭВМ. Затем бобина с магнитной лентой передавалась на эту ЭВМ, где происходила обработка пакета и формировался ответ. Сам ответ опять же печатался простенькой машиной на принтере.
Аноним 23/06/21 Срд 12:38:47 #254 №2077716 
>>2077710
Такого уговня ввод-вывод в стандартной библиотеке раста есть по println!() и io::stdin().
Аноним 23/06/21 Срд 12:41:10 #255 №2077720 
>>2077716
Сейчас же не 1970-е, все уже привыкли к графическим интерфейсам. И тут выходит новый язык, который опять предлагает старьё 50-летней давности. Я готов с этим мириться в старых языках, но новые надо разрабатывать под текущие нужны.
Аноним 23/06/21 Срд 12:41:46 #256 №2077721 
>>2077720
*нужды

быстрофикс
Аноним 23/06/21 Срд 12:50:40 #257 №2077733 
>>2077720
>все уже привыкли к графическим интерфейсам
Кто-то и срать, не снимая свитер, привык. Какое это отношение имеет к чему либо?

Разработчики С написали юникс. Точнее, они разработали С, чтобы написать юникс. Ввод-вывод уровня юникса в расте есть.

Разработчки Qt не написали С++, ввода-вывода уровня Qt в расте нет.
Аноним 23/06/21 Срд 12:54:45 #258 №2077746 
>>2077733
Мне кажется, что создание графической библиотеки для Раста могла стать серьёзным конкурентным преимуществом. Многие С++ разработчики бросили бы своё мучение с Qt и прочими кривыми либами и перешли бы на Раст.
Аноним 23/06/21 Срд 13:01:50 #259 №2077762 
>>2077746
>Мне кажется, что создание графической библиотеки для Раста могла стать серьёзным конкурентным преимуществом.
Конечно. Но это не обязанность создателей языка и компилятора (для си даже эти две задачи разделились 40 лет назад). У них своих дел полно. Если ты способен это сделать, то будешь крутым, уровня Qt Software.
Аноним 23/06/21 Срд 14:16:54 #260 №2077859 
>>2077762
Ну биндинги для qt уже есть, причём от разраба самой qt, который уже делал другую версию биндингов на С++ - с использованием stateful-шаблонов вместо moc. Даже минимальная интеграция с асинхронным кодом есть: https://github.com/woboq/qmetaobject-rs
Аноним 23/06/21 Срд 14:18:41 #261 №2077862 
>>2077859
Я так понял, он не про биндинги, а про нативную библиотеку, как Qt, только написанную на расте.
Аноним 23/06/21 Срд 14:21:32 #262 №2077865 
>>2077862
А, ну пытались пилить на webrender'е (который сам по себе слишком низкоуровневый, зато берёт на себя всю работу по рендерингу текста и прочей хуйни). Но оказалось на одном энтузиазме гуй-библиотеку не сделаешь и все подобные проекты сдувались.
Аноним 23/06/21 Срд 15:05:44 #263 №2077934 
Дайте мне функцию putpixel(x,y,color) и я напишу вам гуй.
Аноним 23/06/21 Срд 15:08:47 #264 №2077948 
>>2077934
Не напишешь. Либо будет неюзабельное говно, либо через полтора месяца сдуешься и закроешь проектик.
Аноним 23/06/21 Срд 15:10:41 #265 №2077955 
>>2077934
>dear imgui
Аноним 23/06/21 Срд 15:34:19 #266 №2077984 
>>2077293
Хз, я просто взял musl и получил статически скомпилированный исполняемый файл.
>>2077493
ada, также языки с автопруверами и транспиляцией в си типа ats, lowstar и т.д.
Аноним 25/06/21 Птн 11:01:46 #267 №2079680 
Есть какое-то сложившееся мнение, что лучше делать в циклах
1. зарание задать изменяемую переменную и каждый раз её переиспользовать
2. на каждой итерации цикла делать новый let неизменяемой переменной и потом её дропать

Компилятор оптимизирует второе? Оно "безопаснее"? Пытался придумать пример и посмотреть в голдбольте, но фантазии не хватило.

итого
let mut a;
loop {a = ();}
или
loop {let a = ();}
Аноним 25/06/21 Птн 14:37:55 #268 №2079969 
Чем так хорош clap, что его в каждом первом туториале по cli утилитам пихают?
Аноним 25/06/21 Птн 22:30:41 #269 №2080538 
>>2079680
Зависит от типа переменной. Лучше всего не использовать переменные вне цикла, а использовать читерский `Iterator::fold`
Аноним 25/06/21 Птн 22:31:30 #270 №2080541 
>>2079969
Тем же, чем так хорош Qt/boost, что их в каждый туториал по крестам пихают.
Аноним 26/06/21 Суб 07:54:39 #271 №2080710 
>>2077493
nim, crystal, D
Аноним 26/06/21 Суб 07:55:40 #272 №2080711 
>>2077493
1C
Аноним 26/06/21 Суб 08:09:56 #273 №2080714 
R
Аноним 26/06/21 Суб 08:32:50 #274 №2080718 
>>2080538
>Зависит от типа переменной.
Структура, которую получаешь из внешнего источника.

>Лучше всего не использовать переменные вне цикла, а использовать читерский `Iterator::fold`
Это, конечно, здорово, но я имел в виду применительно к эвент лупу, который на каждой итерации получает новый эвент.
Аноним 26/06/21 Суб 09:18:37 #275 №2080730 
>>2077493
zig
Аноним 26/06/21 Суб 12:43:51 #276 №2080817 
>>2077493
vlang, umka, sneklang
Аноним 26/06/21 Суб 18:26:45 #277 №2081009 
>>2077622
>Предложил бы хоть системный вызов для приличия дернуть.
Проход в вендорлок уже в хэловорде. Причём не просто вендорлок, а лок на наличии ОС. Ты просто предлагаешь насрать говнокодом чтобы подрочиться, или реально долбоёб?
Аноним 26/06/21 Суб 18:30:30 #278 №2081017 
>>2077639
Потому что:
а) Не каждый таргет имеет какие-то там окна и вообще графический интерфейс (или даже возможность что-то выводить на экран), лол.
б) Даже M$ это не осилила поддерживать на таком качестве, чтобы деплоить с языком, а не отдельно. Ты на кого надеешься? На попенсорс сообщество, которое 20+ лет не может сделать нихуя самостоятельно? Без кучи корпораций, как с линуксом/бсд/итд.
Аноним 26/06/21 Суб 19:52:06 #279 №2081094 
>>2081009
Вот это маневры, знатный же ты стрелочник, братишка. В твоем изначальном предложении вообще был лок на наличие libc, это абсолютно такой же лок на наличие ОС, да еще и на определенную ОС.
Аноним 26/06/21 Суб 20:26:16 #280 №2081150 
>>2081094
>это абсолютно такой же лок на наличие ОС
Лол?
>да еще и на определенную ОС.
И на какую же?

Не знаю с чего ты решил что libc == glibc, но я, очевидно (по крайней мере для меня) говорю о подразумеваю что libc == POSIX C stdlib. Какой же у стандарта может быть вендорлок или зависимость от наличия системы — я хз.
Аноним 26/06/21 Суб 20:28:39 #281 №2081154 
>>2081150
>говорю о
говоря o libc
Аноним 26/06/21 Суб 20:41:03 #282 №2081163 
>>2081150
Опережая школьные пуки о том, что гугол выдаёт первее, бомбану документацией:
https://man7.org/linux/man-pages/man7/libc.7.html
>The term "libc" is commonly used as a shorthand for the "standard
>C library", a library of standard functions that can be used by
>all C programs (and sometimes by programs in other languages).
>Because of some history (see below), use of the term "libc" to
>refer to the standard C library is somewhat ambiguous on Linux
и там же рассказ про кучу реализаций libc в линуксе.


>https://fuchsia.googlesource.com/docs/+/refs/heads/sandbox/jschein/default/libc.md
>On Posix-y systems, programs link against a library (either dynamically or statically) called libc. This library provides the functions defined by the C standard, as well as the runtime environment for C programs.
Разрабы фуксии в гугле тоже не считают что libc == glibc.


>https://llvm.org/docs/Proposals/LLVMLibC.html
Пропозал LLVMного прожекта, пишут что хотят сделать libc которая по возможности будет работать поверх системных libc. Кек. Как бы подразумевая, что она не одна, внезапно нахуй.

sageАноним 27/06/21 Вск 01:09:29 #283 №2081357 
>>2081163
>Пропозал LLVMного прожекта, пишут что хотят сделать libc которая по возможности будет работать поверх системных libc. Кек. Как бы подразумевая, что она не одна, внезапно нахуй.

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

мимо крокодил
Аноним 27/06/21 Вск 14:28:22 #284 №2081772 
>>2081357
>группы индусов в гугле
>которые внятно не смогли объяснить зачем это нужно
Я могу за них это сделать — чтобы выбить новые лычки и больше бабулеса от гугла, пропихнув новый проект. И работай они где нибудь в M$ — у них всё бы вышло, кекус.
Аноним 28/06/21 Пнд 19:20:31 #285 №2083035 
Поч такой странный синтаксис с шаблонными функциями
Зачем фун::<тип>(), а не фун<тип>()

я дурачек, не ругайте только
Аноним 28/06/21 Пнд 19:28:33 #286 №2083055 
>>2083035
Чтобы упростить работу парсера. Без :: знак < сходу невозможно отличить от операции меньше (которая обозначается так же - <). Если бы :: не было, приходилось бы каждый раз при встрече < идти назад и смотреть что оно означает - тип функции или операцию сравнения. Пока решили парсер подобным не переусложнять, хотя предложения и были.
Аноним 28/06/21 Пнд 20:05:34 #287 №2083104 
>>2083055
А разве нельзя просто увидеть что после знака меньше идёт идентификатор типа, а не переменная
Аноним 28/06/21 Пнд 20:10:40 #288 №2083115 
>>2083104
Ты их сходу никак не отличишь. Это либо надо иметь список всех переменных/типов (который составляется уже после парсинга), либо идти назад и смотреть каким образом всё это используется.
Аноним 29/06/21 Втр 00:12:43 #289 №2083332 
Есть структура, которая парсится из жсона с помощью serde.

struct Foo {
hash: String,
//other fields
}

Мне надо её сложить в два хэшмапа, один из которых это HashMap<String, Foo>, где в качестве ключа будет выступать хэш, который лежит в этой структуре. Когда я пытаюсь положить её в мапу, то появляется ошибка

> map.insert(i.hash, i)
> ^ value used here after partial move
Что логично. Но как эту ошибку обойти, не клонируя строку (что можно сделать, но хотелось бы понять как сделать правильно по раст-вей). Хэш не будет изменяться во время работы программы, но поля структуры будут. Можно ли указать хэш как &'static str? Что в таком случае делать с serde, сможет ли он десериализовать файл?

Второй хэшмап будет выглядеть вот так: HashMap<String, Vec<Foo>>. Отсюда данные могут быть только ридонли, так что логичнее сделать сигнатуру такой: HashMap<String, Vec<&Foo>>, да?
Аноним 29/06/21 Втр 01:24:51 #290 №2083349 
>>2083332
Лучше сделай наоборот. Ключ храни в хэшмапе, а в специальной структуре ссылку на ключ. Например так: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=5839778fb91f42615b11351789a41a76 Иначе без ансейфа (либо уродливых умных указателей) никак не сделать.
> Второй хэшмап
Проблема HashMap<?, Foo> в том, что Foo там внутри хранится как значение, а значит хэшмапа может перемещать его по памяти как захочет делая неверными все ссылки на внутренности и на саму Foo. Это значит, что надо Foo хранить где-нибудь отдельно в памяти, а в хэшмапу засовывать ссылку, например HashMap<?, Rc<RefCell<Foo>>> (если приложение многопоточное, то нужно использовать другую хэшмапу, из стандартной библиотеки она может работать только в одном потоке). В любом другом случае (например если захочешь избавиться от Rc/RefCell ради перформанса) придётся использовать ансейф.
> Отсюда данные могут быть только ридонли
Проблема в том, что хоть они и ридонли, но как я понял с первой хэшмапы изменять-то их можно. А значит состояние гонки всё равно возникнуть может. Для предотвращения этого и нужен RefCell. Rc/Arc нужен, чтобы память очистилась после удаления данных из обоих хэшмапов.
Аноним 29/06/21 Втр 09:35:58 #291 №2083466 
Привет. Есть ли плюсы у языка rust в геймдеве? Я имею в виду смогут ли допустить люди читерить в шутере написаном на расте?
Аноним 29/06/21 Втр 09:45:52 #292 №2083472 
>>2083332
Либо клонируешь строку, либо хранишь строку как `(A)Rc<str>` и опять-таки клонируешь, либо вообще не хранишь hash в Foo, а тупо имеешь некую структуру Bar, которая имеет все поля Foo кроме хэша, и при засовывании в хашмапу разбираешь Foo на хэш и Bar.

>>2083466
Смогут, почему нет. Проблема читерства в играх вовсе не в том, что там хартблиды везде, а в другом. Например, wallhack в шутерах работает не потому, что у тебя данные о позиции противников случайно протекли на машину игрока, а потому что ты не можешь их не протечь, иначе у тебя будут ебейшие лаги в игре.
Аноним 29/06/21 Втр 10:01:47 #293 №2083475 
>>2083472
То есть допусти если бы та же кс го была бы на расте, то читеров бы это не остонавило? Тип память игры более защищена и пакеты тоже.
Аноним 29/06/21 Втр 10:56:26 #294 №2083513 
>>2083475
В каком месте они более защищены? Когда данные попали на кудахтер игрока, он может их прочесть. Я же говорю, что проблема читерства в играх — это вовсе не проблема хартблидов.
Аноним 29/06/21 Втр 14:25:07 #295 №2083679 
>>2083475
Нет, чел, не остановило бы как уже сказал чел выше.

А вот если бы вальв было бы не похуй, они активно развивали античит и систему репортов, а потом активно ебали бы за это (+ если бы их игори были бы платными, а не как сейчас — хуяришь новый акк за 2 минуты и продолжаешь) — тогда этих пидорасов было бы меньше.

Реально раст в геймдеве может помочь разве что в разработке бэкэндов и сетевых частей игр — для всех игр тех же вальв каждые полгода-год появляются новый софт, позволяющий с помощью этих самых хартблидов, как анон выше назвал уязвимости, от которых спасает раст, крашить нахуй сервера и ддосить других игроков.
Аноним 29/06/21 Втр 17:09:31 #296 №2083888 
29E51DD4-AA31-473C-99C2-48D4BF464B5C.jpeg
Мотаюсь от Го к Расту и обратно, оба нравятся, но хочу писать только на одном, не могу определиться. Моя цель хорошо освоить один язык и юзать его для повседневных задач. Раст осень ноавится, но сложный. Раст и Го вообще очень похожи, go fmt/rustc fmt, cargo install / go install и друг у дружка пиздят фичи.

Вопрос. Наступит ли момент, когда зорошо выучив Раст, я буду на нем задачи решать также быстро как на Го? Или псоле Раста всегда как после войны возвращаешься?
Аноним 29/06/21 Втр 17:26:47 #297 №2083910 
>>2083888
Не знаю. Я вот взял одну библиотеку, 3 дня корячился, сделал четверть фичи, которую я хотел, половину руками дописывал.
Взял другую библиотеку, за 2 часа повторил ту же четверть фичи, к концу второго для сделал всё, что хотел. Получается, как повезёт с библиотеками?
Аноним 29/06/21 Втр 19:51:48 #298 №2084104 
>>2083888
Хуй знает, джва года писал на goВНЕ. Полтора года назад пересел на раст.
Раст кажется куда более адекватным, чем ГОвно даже для прототипирования. Единственная боль - это асинхронная среда, если ты делаешь что-то больше, чем круд-сервачок и сырость либ.
От всего остального просто кайфую. Говно вспоминаю, как страшный сон.
Аноним 29/06/21 Втр 19:58:52 #299 №2084111 
>>2084104
Спасибо! Соглашусь с асинхроностью. Но знаешь, я возненавидил async/await ещё когда бота для дискорда писал своей стримерке любимой на питоне, мозг взрывается.
Аноним 29/06/21 Втр 20:00:11 #300 №2084114 
>>2084104
А что с КПД и продуктивностью? Я вот из usb-модема LTE сделал перенаправление СМСок себе в телегу, быстреьнко на Го код нахуячил раз-раз и готово за вечерок.

Раст вообще в повседневных задачах как он?
Аноним 29/06/21 Втр 20:12:51 #301 №2084123 
Допустим, хочу тянуть .m3u8-плейлист с твича прямой трансляции и вручную без streamlinkа чанки парсить через for/loop и сохранять на диск аппендить в файл. + возможность записи не 1-го стрима, а 2, 3 хоть 10 стримов одновременно.

Что выбрать лучше, Го или Раст для такой задачи и почему?
Аноним 29/06/21 Втр 21:01:37 #302 №2084188 
>>2084123
Что знаешь, то и бери. Это элементарная задача же: возьми здесь, положи сюда. До 200 штук можно не задумываясь использовать треды ос, никакого взамодействия между ними в твоей схеме нет.
Аноним 29/06/21 Втр 21:15:14 #303 №2084204 
Правда что если используется Arc/Rc, RefCell и прочие хаки компилятора, то программа где-то спроектирована неправильно?
Аноним 29/06/21 Втр 21:22:31 #304 №2084212 
>>2084204
>Arc/Rc, RefCell и прочие хаки компилятора
??
Аноним 29/06/21 Втр 21:25:51 #305 №2084216 
>>2084212
Если борроу чекер работает в рантайме - это хак компилятора.
Аноним 29/06/21 Втр 21:27:51 #306 №2084220 
>>2084216
??
Аноним 29/06/21 Втр 23:59:46 #307 №2084353 
>>2084204
1. Нет, но иногда таки да (но чаще таки нет).
2. Это не хаки, это типы. Например, если тебе надо раскидать строку по разным структурам, и ты не знаешь, какая из строк раньше умрёт, то ты не убиваешь память кудахтера 100500 клонами String, ты берёшь Rc<str> и хранишь строку в одном месте, а указатели на строку хранишь в разных местах. Arc вообще охуительно полезен, тут даже рассказывать не буду, если ты не понимаешь, то GC тебе пухом.
3. RefCell может быть полезен в некоторых однопоточных асинхронных пиздецах, так что тут тоже мимо.
Аноним 30/06/21 Срд 11:25:25 #308 №2084542 
>>2084216
Это хак твоего мозга, братишка.
Аноним 30/06/21 Срд 14:03:09 #309 №2084667 
>>2084542
Зачем порвался?
Аноним 30/06/21 Срд 16:10:19 #310 №2084797 
>>2084667
Я хз, почему у тебя мозг сходу рвётся от такого.
Аноним 02/07/21 Птн 00:14:03 #311 №2085752 
image.png
Ёба, как сделать, чтобы все таски завершились, а потом уже прога завершалась? Прога заверашется сразу не дождавшись tokio::spawn
Аноним 02/07/21 Птн 00:14:36 #312 №2085753 
>>2085752
https://pastebin.com/raw/JcW07P3t
Аноним 02/07/21 Птн 09:38:55 #313 №2085878 
>>2085752
https://pastebin.com/g01Vkbqt
Аноним 03/07/21 Суб 23:27:48 #314 №2087201 
ПЕДЕ Rust
Аноним 04/07/21 Вск 00:34:09 #315 №2087226 
>>2085878
Спасибо!, я заюзал tokio::join!
Аноним 04/07/21 Вск 23:31:17 #316 №2087852 
image.png
image.png
Как добавить трейт ограничения на трейт? Допустим делаю трейт PlusOne (не важно, что он делает конкретно). Хочу в нём сделать дефолтную функцию, которая делает self + 1; Раст мне запрещает со словами error[E0369]: cannot add `{integer}` to `&Self`. Пытался добавлять std::ops::Add (и + std::marker::Sized, который ему требуется), но ошибку это не меняет.

Текст примера для копирования, форматирует вам пусть fmt:
fn main() {
let x: u16 = 3;

trait PlusOne: std::ops::Add + std::marker::Sized {
fn add_one(&self) -> bool where Self: std::marker::Sized {
self + 1;
true
}
}

impl PlusOne for u16 {}
}
Аноним 04/07/21 Вск 23:34:46 #317 №2087856 
image.png
>>2087852
Естественно, если делать это в конкретной имплементации, например, impl PlusOne for u16, то всё срабатывает даже без ограничителей.
Аноним 05/07/21 Пнд 09:23:10 #318 №2087963 
>>2087852
https://docs.rs/funty/1.2.0/funty/

fn add_one(self) -> Self
where Self: funty::IsInteger,
{ self + Self::try_from(1_u8).unwrap() }
Аноним 05/07/21 Пнд 10:00:07 #319 №2087994 
>>2087963
А без крейтов никак? Уф, неудивительно, что я сам такое найти не смог.
Аноним 06/07/21 Втр 10:22:55 #320 №2088659 
glium всё?

>Glium is no longer actively developed by its original author. That said, PRs are still welcome and maintenance is continued by the surrounding community.


Аноним 06/07/21 Втр 17:46:20 #321 №2089034 
>>2088659
Тебя ссылка в этом сообщении на пост из 2016 не смутила?
Аноним 07/07/21 Срд 23:00:42 #322 №2090090 
Есть трейт:

pub trait Foo {
fn bar();
}

Я хочу возвращать из bar() Result<(), Err>. Но мне неизвестно, каков будет тип ошибки, это должна решить реализация трейта. Как это лучше сделать? Передавать ошибку дженериком?

pub trait Foo<TError: Error> {
fn bar() -> Result<(), TError>;
}

На мой взгляд это выглядит немного всрато, или мне кажется?

сука абу сделай уже блок кода в разметке, пидорас

Аноним 07/07/21 Срд 23:06:24 #323 №2090092 
>>2090090
upd: А может это вообще хуёвый дизайн, и лучше сделать как-то так:


pub enum FooError {
Err1,
Err2
}

pub trait Foo {
fn bar() -> Result<(), FooError>
}

И пусть все реализации реализуют Into<FooError> для своих ошибок?
Аноним 07/07/21 Срд 23:12:45 #324 №2090095 
>>2090090
Можно зафигачить box<dyn error>
Аноним 08/07/21 Чтв 00:40:37 #325 №2090138 
b44c6e0c3226b835d9bca7f42ffc1a7481fd6e41.png
Аноним 08/07/21 Чтв 05:06:33 #326 №2090181 
Аноны, а не кажется ли вам, что нас где-то цинично наебали?

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

Хуже того, ради этой безопасности тратится время на всякие проверки и счетчики ссылок, а структуры данных с неясной борроу-чекеру семантикой владения превращаются в кромешный пиздец, как в примере с двусвязным списком, в котором изнихуя появляется unsafe дрочены или rc с refcell точены. То, что на Си пишет первокурсник, на Расте требует матёрого аксакала.

И даже если игнорировать танцы с борроу-чекером, сам язык, как бы это сказать, не фонтан. Элементарная задача - поменять порядок байт в числе при помощи шаблонной функции - выносит мозг похлеще разработки видеокодеков. Серьезно, стандартные функции from/to_be_bytes в шаблоне не используешь никак, т.к. они часть конкретных типов, а не единого трейта. Попытка же сделать transmute из числа в массив и обратно выявит маленькую проблемку в том, что число элементов в массиве нельзя задать через константный метод. Готовое же решение вгоняет в депрессию - как замена 8 сишных однострочных функций предлагается ебический крейт byteorder, где примерно то же делается в 4, блять, тысячи строк.

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

В общем, реальность оказалась грустнее ожиданий.
Аноним 08/07/21 Чтв 05:55:17 #327 №2090191 
>>2090181
> софт на Ржавом падает с таким же грохотом, что и софт на Си или на Джаве.
На си/си++ по-умолчанию софт как раз не падает а успешно пишет/читает за пределы буфера. В жаве вроде тоже проверяет.
> они часть конкретных типов, а не единого трейта
Вот это да, самый большой недостаток. Особенно на фоне всяких жав, где делают наоборот - загоняют как можно большее количество методов в интерфейсы и конкретные объекты используют по-минимуму.
> стандартные функции from/to_be_bytes в шаблоне не используешь никак, т.к. они часть конкретных типов, а не единого трейта
Можно свой трейт сделать. Что-то вроде https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ccf7c21a835443deb53faf281534c2d0
Возможно есть готовые крейты, где все эти функции уже определены, но написать свой довольно тривиально, а с помощью макросов очень просто определить его для всех нужных типов.
> число элементов в массиве нельзя задать через константный метод
С недавних пор можно. Смотри мой пример выше.
Аноним 08/07/21 Чтв 09:29:30 #328 №2090232 
image
Да как эти макросы дурацкие писать
Я их даже читаю с трудом
Аноним 08/07/21 Чтв 10:01:22 #329 №2090250 
>>2090232
Чего там сложного-то? Рекурсивные макросы - вообще тема. Можно например скобочные арифметические операции делать: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=51219e921547e4acb3713399b7f154fe

Каждые круглые скобки () прибавляют единицу, квадратные [] - отнимают. (((3))) равно 6. Жалко только наружные скобки внутри макросов неразличимы и они могут быть любыми.
Аноним 08/07/21 Чтв 10:15:59 #330 №2090257 
>>2090232
А вообще вот гайд по макросам в коде: https://danielkeep.github.io/tlborm/book/mbe-macro-rules.html

Там вообще всё просто.
Аноним 08/07/21 Чтв 10:38:38 #331 №2090274 
>>2090090
Бля, вы тут все ёбнулись. Именно для того чтобы имплементация определяла тип, сделали ассоциированные типы для трейтов.

Иди и посмотри как сделан std::convert::TryFrom или std::str::FromStr, а потом делай по образу и подобию.
Аноним 08/07/21 Чтв 12:21:20 #332 №2090385 
Такой вопрос, я на джаве пишу давно, надоело, хотя и платят норм. Хочу в нативщину. Думаю, либо плюсы вспоминать (10 лет на них не писал). Либо раст учить. Ясно-понятно что раст модный-молодежный-безопасный. Но интересен мне не сам язык, а проекты, которые я смогу делать на нем. На плюсах все еще много крутых вещей пишется (rocksdb, clickhouse, половина яндекса на них). Как думаете, реально проекты в нормальных компаниях на расте будут в ближайшие годы? Не крипто-муть, и не чисто новость "в гугл фуксии теперь можно писать на раст". А чтобы был массовый найм, как есть со всеми мейнстрим языками сейчас.
Аноним 08/07/21 Чтв 12:24:27 #333 №2090389 
>>2090191
> На си/си++ по-умолчанию софт как раз не падает
В Си - не падает, да, но в современном Си++ всё же обычно пишут так, чтобы на такое не напороться, используя ту же самую проверку границ или просто обход элементов, а не индексов. Когда же используется что-то типа for, проверку границ можно сделать вручную.

И тут всплывает недостаток Раста: если границы массива или слайса не определены на этапе компиляции, то они будут проверятся для каждого элемента, а не все скопом. Пишешь горячий метод? Тут не только unsafe нужен, тут ещё инкапсуляцию придется нарушить, т.к. из уже написанного метода проверку границ не выкинешь.

> Особенно на фоне всяких жав, где делают наоборот - загоняют как можно большее количество методов в интерфейсы и конкретные объекты используют по-минимуму.
> с помощью макросов очень просто определить его для всех нужных типов
Спасибо за пример макро, очень толково. Но смотри, сколько бы геморроя можно было бы избежать, если бы бы:
a) трейты можно было специализировать выбором из типов (условно: fn from_le<T: u8 | u16 | u32 | u64>(val: T) { return val.from_le(); } или
б) трейты поддерживали бы утиную типизацию (fn from_le<T>(val: T) { return val.from_le(); }
Сейчас утиную типизацию поддерживают макро, но они оставляют лазейку - если через интерфейс доступны необработанные данные, их можно случайно вытащить, забыв вызвать макро.

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

> С недавних пор можно. Смотри мой пример выше.
Нет, я имею ввиду, через метод, вычислимый во время компиляции. Я пробовал что-то типа std::mem::transmute::<[u8; std::mem::size_of::<T>()], T>. В Си++ я часто сталкивался с тем, что особо заумную конструкцию из шаблонов невозможно было дописать из-за маленького нюанса языка, но шаблоны в Расте в сравнении с Си++ - это как арифметика против матана, и всё равно я упираюсь в непринципиальные ограничения.

Попробую сформулировать: Раст пиарится как современный системный язык, но по фичам он застыл между Go и Си++03, если не ниже, и писать на нём приходится самый тупой код. Я даже могу представить себе впечатления шарписта, который придёт писать на Расте. Это как перейти с Си++ обратно на Си - каждый раз проверяешь, не вырос ли клоунский колпак на голове от постоянного заката солнца вручную.
Аноним 08/07/21 Чтв 12:37:26 #334 №2090404 
>>2090385
> Как думаете, реально проекты в нормальных компаниях на расте будут в ближайшие годы? Не крипто-муть, и не чисто новость "в гугл фуксии теперь можно писать на раст". А чтобы был массовый найм, как есть со всеми мейнстрим языками сейчас
Кмк, ждать этого не стоит. Нативное программирование сейчас почти умерло - выгоднее нагнать студентов на очередной веб-стартап, чем писать под десктоп с неясными перспективами. Ты ведь и сам, наверное, брезгуешь искать новый софт в Windows Store? При этом код на Расте пишется медленнее чем даже на Си++, а из последнего все компании ещё в 90-е сбежали на более дешевую в разработке Яву. Перспектив, кроме как в написании микросервисов, библиотек, или в хардкорном системном программировании, я не вижу.
Аноним 08/07/21 Чтв 12:45:23 #335 №2090409 
>>2090232
Просто думай о макросах, как об обобщении функций: если функция в аргументах принимает только выражения, то макро может принять и тип, и имя, и вообще что угодно.
Аноним 08/07/21 Чтв 12:45:54 #336 №2090410 
>>2090389
>то они будут проверятся для каждого элемента, а не все скопом
assert!(idx <= v.len());
while i < idx {
println!("{}", v); // тут без проверки, если что
i *= i;
}

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

>сколько бы геморроя можно было бы избежать, если бы бы:
>a) трейты можно было специализировать выбором из типов (условно: fn from_le

Уже сделано: https://docs.rs/funty/1.2.0/funty/trait.IsInteger.html#tymethod.from_le

Но конкретно из байтов нельзя так сделать, потому что массивы с разными размерами в расте — это разные типы. Изволь писать всякие
fn try_from_le_bytes(s: &[u8]) -> Result<Self, ()>
если конкретно трейтами хочешь, а не макросами.

>но шаблоны в Расте
В расте нет шаблонов, ебись с процедурными макросами, если хочешь похожую с шаблонами функциональность.
Аноним 08/07/21 Чтв 12:47:29 #337 №2090412 
>>2090410
>println!("{}", *v.index(i)); // тут без проверки, если что
Блядский двач опять сожрал скобки
Аноним 08/07/21 Чтв 12:59:34 #338 №2090414 
>>2090274
Точно, спасибо, анон. Кодить поздно ночью - вредно, забываешь про очевидные вещи.
Аноним 08/07/21 Чтв 13:18:21 #339 №2090422 
>>2090404
У джавы микросервис-проекты активно откусывает голэнг в данный момент.
Аноним 08/07/21 Чтв 13:26:25 #340 №2090426 
>>2090410
> Та же самая херня, что и в крестах, только если ты забудешь assert поставить, у тебя не нога оторвётся, а программа просто медленнее работать будет.
Так это вырожденный пример - v.len() эквивалентен пробитию абстракции нижележащего хранилища. Если взять не vec, а какую-нибудь deque, то ты так легко не отделаешься.

> Уже сделано
Ну да, сделано через impl для трейта. Анон выше привел аналогичную реализацию. В byteorder сделано также. Но это адов пиздец - вместо одного обобщенного метода писать эту ебанину с макросами для каждого конкретного случая. Вместо утиной типизации с опциональным указанием конкретных трейтов имеем обязаловку. Блядь, по мнению авторов, если я напишу просто fn add<T>(a: T, b: T) -> T { a + b } без указания трейтов, Луна ебанётся на землю, или что?

> В расте нет шаблонов
Ну, формально, их нет нигде кроме Си++ и, может Nemerle? :)
Аноним 08/07/21 Чтв 13:28:46 #341 №2090429 
>>2090389
> a) трейты можно было специализировать выбором из типов (условно: fn from_le<T: u8 | u16 | u32 | u64>(val: T) { return val.from_le(); } или
Такую хуйню можно сделать процедурным макросом. Правда будет мегапердольно.
> Я пробовал что-то типа std::mem::transmute::<[u8; std::mem::size_of::<T>()], T>
Тут на самом деле две проблемы.

Первая - трансмют не умеет работать с генериками - https://github.com/rust-lang/rust/issues/61956 То есть даже std::mem::transmute::<T, T>(...) выдаст ошибку, несмотря на то, что T очевидно равен по размеру самому себе. Тут либо использовать объединения (Си-стайл) либо трансмутить ссылки, а не сами объекты (т.е. std::mem::transmute::<&[u8; {std::mem::size_of::<T>()}], &T>)

Вторая - сложные вычисления внутри константных генериков пока не разрешены - https://github.com/rust-lang/rust/issues/76560
Хуй знает когда стабилизируют, но в найтли версии уже работает (хотф и ругается, что фича нестабильна и даже в ночнушке не стоит её использовать). Вот мой пример с объединениями и сложными вычислениями: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=58dd9dd948a74c00e9d5b554042fa22d
Аноним 08/07/21 Чтв 13:34:41 #342 №2090438 
>>2090429
> Вот мой пример с объединениями
И, кстати, я не знаю всегда ли yoba_transmute валидна или нет (но сделать её unsafe в любом случае надо). Там ведь ещё и выравнивания и прочая хуйня может быть, которая после подобного трансмута станет UB.
Аноним 08/07/21 Чтв 13:44:17 #343 №2090449 
>>2090429
> Такую хуйню можно сделать процедурным макросом. Правда будет мегапердольно.
И небезопасно при этом - сами данные для этого должны торчать наружу, в отличие от трейта.

> Вот мой пример с объединениями и сложными вычислениями
Ты ведь понимаешь, что такой код не очень вдохновляет, да? Тут ведь вопрос не в том, реализуемо ли это вообще, а в засорении бизнес-логики такими костылями. И опять unsafe. Хоть одна сколько-нибудь крупная программа без него обходится?
Аноним 08/07/21 Чтв 13:47:25 #344 №2090452 
>>2090449
> И небезопасно при этом
Не, безопасно (можно сделать без единого ансейфа). По сути будет аналог дак-тайпинга из С++, правда ошибки будут ещё запутанней.
> Ты ведь понимаешь, что такой код не очень вдохновляет, да?
Потому трансмутят обычно просто ссылки (оригинал при этом не трогают). Либо работают сразу с массивами, а не готовыми объектами. Просто трансмутить сам объект чревато неявными UB (включая невызов деструктора).
Аноним 08/07/21 Чтв 13:58:33 #345 №2090464 
>>2090452
> Просто трансмутить сам объект чревато неявными UB (включая невызов деструктора).
Я-то изначально хотел сделать преобразование в be/le, и казалось, что решение должно быть простым. А оно вон как получается.

В общем, спасибо за примеры - всё примерно так как я и думал. Сейчас я удалюсь и, наверное, почитаю спеки на Swift - интересно, как те же проблемы решаются там.
Аноним 08/07/21 Чтв 14:20:06 #346 №2090488 
>>2090410
Знаешь, анон, похоже Расту похуй на ассерты. Вот пример: https://godbolt.org/z/T7WWjK98x - ассертов вроде достаточно, а проверка границ не убирается. Ну хотя бы каждую итерацию она не делается - и то хорошо.
Аноним 08/07/21 Чтв 14:22:22 #347 №2090490 
>>2090488
Поправка: а не, всё же делается. Ну и где теперь твой Бог?
Аноним 08/07/21 Чтв 15:32:52 #348 №2090563 
>>2090490
В пизде, очевидно. Нехуй пользоваться индексами вместо итераторов, что могу сказать. Пиши хороший код, и всё будет летать.
Аноним 08/07/21 Чтв 15:38:13 #349 №2090568 
>>2090563
Идиоматичный код кстати тоже идёт с проверкой в каждой итерации:

v.iter().skip(from).take(to - from).fold(0, |acc, item| acc + *item as u32)

Вот это отсосец.
Аноним 08/07/21 Чтв 15:48:09 #350 №2090573 
>>2090568
Ну так пиздуй в спп-парашный тред, говно, хули ты тут забыл то?
Аноним 08/07/21 Чтв 15:49:42 #351 №2090579 
>>2090573
Что, аргументов нет и осталось только какашками кидаться, а?
Аноним 08/07/21 Чтв 15:49:43 #352 №2090580 
>>2090563
Знаешь, в чём твоя беда? Ты очень злой. Знаешь, в чём беда Раста? Он реализован в виде тонкой обёртки над LLVM, поэтому в этом конкретном случае он сосёт даже у JIT-ов типа C#. Вот похожий код на ШарпЛабе: бит.ли/3qUnyZa

Надо на досуге сравнить производительность Раста и Свифта - может быть, простоту компилятора Раста не перебьют даже расходы на счётчик ссылок.
Аноним 08/07/21 Чтв 15:50:54 #353 №2090581 
>>2090579
> пук
Аноним 08/07/21 Чтв 15:53:17 #354 №2090582 
.jpg
>>2090581
Я твоё фото нашёл. Дилляцию сегодня уже делал?
Аноним 08/07/21 Чтв 16:01:31 #355 №2090592 
>>2090580
upd: а, не, ложная тревога. Свифт тоже сосёт! Пример, да ещё и идиоматичный (смотрите, я выучил Свифт за три минуты!): https://godbolt.org/z/js6v9j914

Хотя я мог бы догадаться - у Свифта единственный известный мне компилятор, способный производить 20-мегабайтные хеллоуворлды.
Аноним 08/07/21 Чтв 16:02:32 #356 №2090594 
>>2090582
Так на фото типичный говнарь же? Или я что-то важное не знаю о представителях нетрадиционных музыкальных предпочтений?
Аноним 08/07/21 Чтв 16:05:15 #357 №2090598 
>>2090594
На фото один из растодевелоперов (перекатившийся из раби). Правда сейчас уже ничего не кодит и последний растокоммит у него - изменение имени в растовской репе с Шона на Сейдж.
>>2090592
> Хотя я мог бы догадаться
Мог бы. Оба основаны на ллвм и перекладывают на ллвм большую часть работы. А ллвм уже в свою очередь срёт себе в штаны.
Аноним 08/07/21 Чтв 16:12:38 #358 №2090604 
>>2090592
> add rax, qword ptr [rdi + 8*rdx + 32]
> jo .LBB1_6
Разве это не проверка на переполнение регистра (т.е. на integer overflow)? Такое статическим анализом при компиляции не словишь. И да, если отключить проверку на переполнение (arr.reduce(0, +) поменять на arr.reduce(0, &+)), то генерируется нормальный код без двойных проверок да ещё и с SIMD. Раст соснууул.

Аноним 08/07/21 Чтв 16:14:18 #359 №2090605 
>>2090598
Я вот в компилеры не лезу - стесняюсь своих скромных знаний. А господин с фотки, видимо, в своём трансвестизме совсем стыд потерял.

Справедливости ради, проверка границ может быть связана с корректностью программ: в обоих языках взят курс на изничтодение UB, так что компилер может честно решать задачу по исполнению программы до последнего, пока она не ёбнет.
Аноним 08/07/21 Чтв 16:20:00 #360 №2090607 
>>2090604
Знаешь, а ты прав, конечно. Другое дело, что код реально всратый - надеюсь, внутри выражений он такие "оптимизации" не проводит, иначе функциональный код перестанет помещаться в кэш.
Аноним 08/07/21 Чтв 16:21:00 #361 №2090609 
>>2090568
Это нихуя не идиоматичный код.

v.get(from..to)?.iter().fold(0, |acc, item| acc + *item as u32)

Вот это — идиоматичный код.
Аноним 08/07/21 Чтв 16:26:04 #362 №2090613 
>>2090609
> Это нихуя не идиоматичный код.
Идиоматичный. Другое дело, что все эти крики про ZERO-COST итераторы - пук в лужу. Хоть итераторы и хранят размер массива и передают его дальше по цеопчке, компилятор (или ллвм) эту информацию не используют.
Аноним 08/07/21 Чтв 16:28:05 #363 №2090615 
>>2090613
Ало, ты размер не проверил перед созданием итератора, что ты блять хотел, UB получить в safe коде? `take` может и меньше выданного ему числа итераций совершить, если что, потому и проверки.
Аноним 08/07/21 Чтв 16:30:49 #364 №2090617 
>>2090615
> ты размер не проверил перед созданием итератора
Итератор знает размер массива, потому что итератор vec'а имплементирует https://doc.rust-lang.org/std/iter/trait.ExactSizeIterator.html
ExactSizeIterator специально для этого и создавался, он передаёт размер итератора дальше по цепочке и в любой момент (кроме модификаций, при которых размер меняется например flat_map) этот размер известен.
Аноним 08/07/21 Чтв 16:31:50 #365 №2090618 
Аноны, пока у вас тут научный диспут, позволю себе рекламную паузу: rls для лохов, rust-analyzer - выбор мастеров. Помните это, когда вас тоже заебёт отваливающаяся проверка ошибок. Спасибо за внимание.
Аноним 08/07/21 Чтв 16:31:51 #366 №2090619 
>>2090617
> кроме модификаций, при которых размер меняется например flat_map
Уточню - модификаций, при которых размер меняется на неизвестное значение.
Аноним 08/07/21 Чтв 19:48:25 #367 №2090812 
>>2090618
>rust-analyzer
этой хуйне и 16GB мало
Аноним 09/07/21 Птн 14:46:21 #368 №2091314 
Здравствуйте. Насколько реально выучить Rust если знаний в области программирования нет никаких? Сложилось впечатление что c++ морально устарел и все программы переходят на rust. Discord, tor и т.п.
Аноним 09/07/21 Птн 14:48:46 #369 №2091317 
>>2091314
Учи лучше жс. В расте работы для совсем нюфагов скорее всего ещё долго (возможно никогда) не будет.
Аноним 09/07/21 Птн 14:53:34 #370 №2091321 
>>2091317
Это не так. Работа есть. Если программист не может быть самозянатым, то это плохой программист.
Аноним 09/07/21 Птн 15:01:00 #371 №2091322 
>>2091321
С ЖСом (а точнее его братом-близнецом ТСом) самозанятым тоже быть проще.
Аноним 09/07/21 Птн 15:03:48 #372 №2091325 
>>2017017 (OP)
Есть какие-то преимущества шарписту вкатиться в раст?
Аноним 09/07/21 Птн 16:43:21 #373 №2091413 
Альтернативные компиляторы кто-нибудь пробовал юзать? Как работают?
Аноним 09/07/21 Птн 16:58:24 #374 №2091440 
>>2091314
> Насколько реально выучить Rust если знаний в области программирования нет никаких?
Нереально и ненужно. Раст нужен только для системного программирования, а оно в наше время почти умерло. Быстрее и полезнее будет выучить JS.

>>2091321
> Если программист не может быть самозянатым, то это плохой программист.
Это неправда. Не у всех нас специализации позволяют прибыльно фрилансить, а собственный проект, с которого можно жить - это покруче Святого Грааля.
Аноним 09/07/21 Птн 16:59:28 #375 №2091442 
>>2091325
> Есть какие-то преимущества шарписту вкатиться в раст?
Есть какие-то преимущества русне поселиться в Махачкале?
Аноним 10/07/21 Суб 03:23:25 #376 №2091838 
https://www.youtube.com/watch?v=AdhFDgE1J1E
Аноним 10/07/21 Суб 07:30:52 #377 №2091859 
>>2091838
> Интервью с Rust Developer
Из двух часов аж сорок пять минут пиздежа о своей карьере. Блядские зумеры, откуда у них столько времени слушать говорящие головы?
Аноним 10/07/21 Суб 11:19:15 #378 №2091998 
>>2091440
Не палишься семен.
Аноним 10/07/21 Суб 11:22:05 #379 №2092000 
161503008348-p-porno-bolshie-siski-v-bikini-116.jpg
Здравствуйте. Насколько реально выучить Rust если знаний в области программирования нет никаких? Сложилось впечатление что c++ морально устарел и все программы переходят на rust. Discord, tor и т.п.
Аноним 10/07/21 Суб 12:03:17 #380 №2092031 
>>2092000
>Насколько реально выучить Rust если знаний в области программирования нет никаких?
Не страдай хуйнёй, анон, ты просто заебёшься и дропнешь нихуя не изучив.
Раст — хороший язык, когда он хотя бы 3-й и у тебя уже есть хотя бы крепкая база и какой-то опыт, но точно никак не первый.
Аноним 10/07/21 Суб 12:21:18 #381 №2092043 
>>2092000
Лучше изучи сначала основы С, Rust плох как первый язык
Аноним 10/07/21 Суб 13:18:57 #382 №2092098 
>>2092000
Сейчас главный тренд - это функциональное программирование. И Раст, что мог, перенял из функциональных языков. Но чтобы мышление сразу формировалось в правильном направлении, начинать нужно с хаскеля.
Аноним 11/07/21 Вск 00:45:46 #383 №2092654 
>>2091859
Я например работаю и одновременно слушаю.
Аноним 11/07/21 Вск 11:20:58 #384 №2092793 
>>2092000
Хаскель не учи, нишевая хуйня для математиков и ученных или для илитариев, это вообще другая парадигма, другой мир программирования, другое мышление. Функциональщина ебаная крч. Оставь её для матанов поехавших.

Питон можно, но он скриптовый язык, да и зачем, когда есть Го компилируемый как Раст, а он ближе к Расту. Кто бы что не говорил, да, Го и Раст разные, но все жё они как два брата и похожи. cargo fmt / go fmt, go install, cargo install. Просто у них задачи разные и ниша. Раст системное программированеие, драйвера, ядра, лоу-лвлщина, когда написал 1 раз и на 10 лет надо и чтобы максимум скорость и минимум ресурсы жрало. Движок браузера например писать на нём идеально. А Го это здесь и сейчас, юзерспейс программы для пользователей, есть 2 дня надо сделать чтобы был результат и в продакшн. Ты посмотри ещё кто создавал Го и ахуеешь.

C# и Java два брата акробата сразу нах пушто виртуальная машина это и лагающая хуйня.
C/C++ устарели, можно учить если есть желание познать камплюктор саенс и как работает ПК, но оно тебя выматает нахуй и ты утратишь интерес к кодингу навсегда и не вернешься больше.
Как и если сразу начнешь кодить на Раст, ахуеешь и забросишь навсегда не вернувшись в этот мир.
Поэтому самый короткий путь это Го и потом Раст или Го, js/node.js -> Rust.

Я начинал кодинг с Дельфи, потом Бэйсик, С++ Билдер 6, СиШарп, потом Питон, потом Го, потом Раст. И я несколько раз срывался и забивал хуй на Раст возвращаясь к Го с утроенной силой, потому что Го самый простой и мощный язык что я учил, считаю все языки должны по простоте чтения кода и синтаксиса равнятся на Го. Хотя синтаксис Раста сложный начинаю любить все больше по мере того как втягиваюсь в него.
ЯваСкрипт просто потому что нахуя нужен Питон, когда есть ЯваСкрипт божественный, так он блядь ещё и в 3-5 раза быстрее Питона.

Просто забей хуй и иди по пути JS/Go -> Rust. Кстати на хей в сторону .js забей хуй, это уже давно не тот язык что был.
Аноним 11/07/21 Вск 11:25:25 #385 №2092800 
>>2092793
Ещё забыл Раст реально никогда не должен быть первым языком. Потому что даже сейчас я его начал изучать и литералли везде вижу пример кода на Го в комментариях, а потом его реализация на Расте и так часто. То есть такое ощущение что нужно знать Го или предполагается что ты уже знаешь хорошо Го, чтоыб писать на Расте. То есть тебе объясняют Раст на примерах Го-кода, это пиздец смешно.

Я на данный момент хочу выйти в такой КПД на Расте, чтобы мог писать также быстро как на Го. Я надеюсь у меня получится и Раст станет моим silver bullet языком на абсолютно все мои прикладные задачи. Хочу писать только на 1-м языке и хорошо его знать, а не 10 разных языков и все плохо знаешь.

C# и java забыл скзаать что это языки прошлого поколения, не трать время, когда есть next gen как Го и Раст за которыми будущее.
Аноним 11/07/21 Вск 11:35:22 #386 №2092812 
>>2092000
Зря на дваче спросил, тебя сейчас любители уёбищных языков попытаются из раста переманить.

>Насколько реально выучить Rust если знаний в области программирования нет никаких?
Охуительно реально, но охуительно долго до реального выхлопа. Раст решает такие проблемы, которые тебе не снились, а крестовикам постоянно снятся в кошмарах. Поэтому тут больше вопрос, чего ты хочешь от программирования, а не реально ли выучить. Чтобы выучить раст, просто берёшь The Book, а потом хуяришь от вступления до самого конца, пописывая код из книги. После The Book выбираешь куда хочешь пойти дальше, и в зависимости от этого читаешь Rustonomicon, гайд по tokio или ещё что-нибудь.
Аноним 11/07/21 Вск 11:43:28 #387 №2092818 
>>2092812
Никто его не отговаривает от Раста лол, а наоборот показываем ему максимально комфортный путь к нему. Самый короткий путь Go -> Rust. Но будет хромать кругозор, потому что будет знать 0 интерпретируемых языков вроде Питона и .js
Аноним 11/07/21 Вск 11:46:00 #388 №2092819 
>>2092812
>Раст решает такие проблемы, которые тебе не снились, а крестовикам постоянно снятся в кошмарах
Например?
Аноним 11/07/21 Вск 11:47:24 #389 №2092823 
>>2092812
Ага да-да, Раст ещё даже не устоялся как язык и быстро меняется.
Я год назад видел Раст код, где писали return, потом мы с другом полгода назад рофлили с того, что там сокращения дикие, ещё более короткие чем в Go, вместо return стал видеть в коде просто r блять. А сейчас вообще блядь просто экспрессия, без r и без return, последняя строка кода это и есть return.

На данный момент все 3 способа работают выше, но сам факт что язык дико и быстро меняется, нахуя новичку в кодинге его учить, чтобы он потом через год полностью поменялся? Вели await? и прочее недавно. Пусть учит Го, а потом на Раст сядет когда стабилизируется. Вот на Го нельзя отличить код 5 летней давности и сегодняшний код, там код всегда выглядит современно и ничего не меняется.
Аноним 11/07/21 Вск 11:50:20 #390 №2092827 
>>2092819
Лайфтаймы и владение
Аноним 11/07/21 Вск 11:56:53 #391 №2092835 
image
image
>>2092823
Гошники, что же с вами не так
Аноним 11/07/21 Вск 13:39:44 #392 №2092945 
>>2092823
> Ага да-да, Раст ещё даже не устоялся как язык и быстро меняется.
Он не устоялся только в сравнении с Си и Го. Вот обзор изменений за пятилетку, на год устаревший, но по нему все равно видно, что именно новых фич языка не так много:
https://blog.rust-lang.org/2020/05/15/five-years-of-rust.html
Если посмотреть, так await вообще ввели в 2019, а issue появился за год до этого. Понятно, до версии 1.0 язык корёжило - он вообще начинался с GC - но сейчас-то это всё в прошлом. Проблема языка не в том, что он молодой или плохой, а в том, что вся его ниша - это процентов 5 рынка коммерческой разработки, которые он ещё и делит с Си и Си++. На весь hh.ru я в прошлом году видел 1 (одну) вакансию Раст-разработчика. Учить его, если он не решает твои задачи, просто невыгодно.
Аноним 11/07/21 Вск 13:53:56 #393 №2092961 
Вдогонку, для чего может быть полезен Раст. На днях прочитал интересное интервью от разработчика sqlite:
https://corecursive.com/066-sqlite-with-richard-hipp/

Там есть момент - автор потратил год жизни, работая по 60 часов в неделю, на написание тестов, и тесты эти постоянно роняли не только его код, но и Oracle. И всё равно в sqlite, бывает, находят по 10 уязвимостей в год.

Раст же в большинстве случаев просто не позволит писать опасный код - участки, где он всё-таки используется, будут помечены блоком unsafe. Например, в веб-движке servo, при его размере в 320k строк кода, таких блоков порядка 1700, и это, наверное, самый сложный из возможных случай - unsafe в нём для оптимизации пиздецки сложной многопоточной бизнес-логики.
Аноним 11/07/21 Вск 14:05:11 #394 №2092966 
>>2092793
>C# и Java два брата акробата сразу
Ну языки всё же сильно разные в возможностях.
На шарпе есть структуры, есть указатели, есть очень низкоуровневые возможности, есть многопоточность в два клика.
Если написать код на шарпе, как на С++, с указателями и ручным управлением памяти (а в шарпе это тоже внезапно есть), то он будет работать так же быстро, как на С++.
Но при этом на шарпе конечно кодить намного приятнее, чем на крестах.
Аноним 11/07/21 Вск 14:12:39 #395 №2092969 
>>2092966
Устройство их одинаковое, оба виртуальные машины и код над ним, оба вышли в одно время, оба ООП-ориентированные, потому что тогда считалось ООП в тренде, как щас в тренде функциональщина. В итоге сейчас снова ценят процедурность больше, а ООП оставили как возможность если хочеца.
Тогда вот считали что будущее будет за таким, теперь они на плаву держатся только потому что в них качают куча денег, на своём поддуве они оба умрут я считаю.
System.Println вот эти вот вызовы даже одинаковые что ява что шарп. Два брата это, которые срутся друг с другом кто из них круче и у кого фич больше.
Аноним 11/07/21 Вск 14:33:21 #396 №2092988 
>>2092969
Ну так ООП для корпоративного софта был и остаётся лучшим вариантом, а это большая часть денег в отрасли. Чистое ФП до сих пор не созрело - в нём слишком много дроча на монады и хитровыебанные системы типов, и слишком мало внимания предметной области. ООП же приближает код к человеческому языку, и позволяет сходу разобраться в любой программе.
Аноним 11/07/21 Вск 14:40:55 #397 №2092996 
Как кастануть &str, чтобы его могла сожрать extern "C" { fn printf() -> i32 }? Пробовал делать fn printf(inp: &str) оно работает (с оговорками) и жалуется на improper_ctypes
warning: `extern` block uses type `str`, which is not FFI-safe
consider using `const u8` and a length instead
Попробовал fn printf(inp:
const u8); let hell = "Hello, World" as const u8;, но тогда ошибка
error[E0606]: casting `&str` as `const u8` is invalid

Вокруг по всякому плясал, но не придумал, как сделать.
Аноним 11/07/21 Вск 14:47:31 #398 №2093008 
>>2092996
Сишные функции жрут в основном строки оканчивающиеся на ноль. В расте строки на ноль не оканчиваются (потому что у них длина стоит отдельно). Тут без копирования строки во временный буффер никак.
Аноним 11/07/21 Вск 14:48:22 #399 №2093011 
>>2093008
Ага, хорошо. Спасибо, что пояснил!
Аноним 11/07/21 Вск 14:52:28 #400 №2093014 
>>2092996
Всё правильно, &str - это слайс строки (указатель начала + указатель конца строки), а в C используется просто указатель на заканчивающуюся \0 строку. Для FFI используется CString и &cstr, CString делается (с копированием) из String или &str. Если ты совсем ебанулся на производительности, то бери слайс &[u8] от String или &str через .to_bytes() и разбей его на указатели перед передачей в функцию.
Аноним 11/07/21 Вск 14:54:02 #401 №2093016 
>>2093014
>Если ты совсем
Я для общего развития тыкаю
(можно было бы и догадаться по использованию printf() в качестве примера)
Аноним 11/07/21 Вск 14:56:57 #402 №2093019 
>>2093014
>бери слайс &[u8] от String или &str через .to_bytes() и разбей его на указатели перед передачей в функцию
Хотя звучит интересно, спасибо. Можно воспроизводимый пример?
Аноним 11/07/21 Вск 15:05:51 #403 №2093031 
>>2093019
Извини, я пока в FFI не лез. Есть статья от какого-то Хуя, где он исследует все варианты: https://thefullsnack.com/en/string-ffi-rust.html
Аноним 11/07/21 Вск 15:07:45 #404 №2093035 
>>2093031
Спасибо!
Аноним 11/07/21 Вск 15:55:14 #405 №2093078 
Screenshot 2021-07-11 155440.jpg
А что так бывает чтоли? 3 дня фармил архипелаг и накопил 1600 примогемов и уотаквот.
Аноним 11/07/21 Вск 15:56:43 #406 №2093079 
>>2093078
А ОТ ТАКОГО ВАШИ БОРРОУ ЧЕКИ ЗАЩИТИЛИ БЫ, А?!?!
Аноним 11/07/21 Вск 16:01:39 #407 №2093084 
>>2092969
Функциональщина родом из начала 90-х, и из колыбели борщехлёбов она не вылезла и не вылезет никогда.
Нет, мне определённо самому нравится чистый функциональный код. Но проблема в том, что компьютеры работают не так. И какой бы компилятор не был умный, функциональный код в РАЗЫ медленнее.
Аноним 11/07/21 Вск 16:04:37 #408 №2093087 
>>2093084
>И какой бы компилятор не был умный, функциональный код в РАЗЫ медленнее.
Почему? Он в какие-то специальные функциональные процессорные инструкции превращается?
Аноним 11/07/21 Вск 16:16:52 #409 №2093096 
>>2093087
Он вынужден выполнять кучу лишних выделений памяти и копирований памяти.
Аноним 11/07/21 Вск 16:18:03 #410 №2093097 
>>2093096
>вынужден
Кто его заставляет? Пусть не выполняет.
Аноним 11/07/21 Вск 16:23:49 #411 №2093106 
>>2093087
Вот пример qsort на Хаскелле: https://godbolt.org/z/19K756Goo

Я такого тупого говна в жизни не видел.
Аноним 11/07/21 Вск 16:28:04 #412 №2093114 
>>2093106
>Вот пример
При чём тут пример? Если на брейнфаке с конкретным компилятором получится не слишком красивый qsort, будет это значить, что
>И какой бы компилятор не был умный, процедурный код в РАЗЫ медленнее
?
Аноним 11/07/21 Вск 16:36:32 #413 №2093116 
>>2093114
> При чём тут пример? Если на брейнфаке с конкретным компилятором получится не слишком красивый qsort, будет это значить, что
Ну так в этом вся суть ФП - красивый высокопарный пиздёж про теорию категорий и код без ошибок, и вырвиглазное позорище на практике.
Аноним 11/07/21 Вск 16:37:49 #414 №2093117 
>>2093116
>Ну так в этом вся суть ФП
Вся суть фп в черрипикинге примеров. Я тебя понял.
Аноним 11/07/21 Вск 16:39:13 #415 №2093119 
>>2093117
Я взял первый пришедший на ум пример. Какие ко мне претензии?
Аноним 11/07/21 Вск 16:55:49 #416 №2093127 
Снимок экрана-20210711165527-1194x856.png
Девочки, подскажите как убрать отладочную информацию из бинарника. Вроде бы стрипнул, но куча мусора всё равно присутствует.
Аноним 11/07/21 Вск 17:06:30 #417 №2093133 
>>2093127
panic = 'abort' в [profile.release], ну и может lto = true до кучи.
~твоя девочка с агромным хуищщем, всё как ты любишь
Аноним 11/07/21 Вск 17:13:29 #418 №2093140 
gnome-shell-screenshot-U9O950.png
>>2093133
>panic = 'abort' в [profile.release], ну и может lto = true до кучи
А полностью можно вырезать?

>[profile.release]
>opt-level = 'z'
>lto = true
>panic = 'abort'

Не очень помогает.
Аноним 11/07/21 Вск 17:16:19 #419 №2093142 
>>2093140
Это не отладочная информация, это ассерты. Их убрать невозможно. Если нужен меньший размер бинарника, есть вариант с еблей с Xargo и сборкой уменьшенной стандартной библиотеки, и всё.
Аноним 11/07/21 Вск 17:17:11 #420 №2093143 
>>2093127
>Вроде бы стрипнул
Чем?
Аноним 11/07/21 Вск 17:18:10 #421 №2093144 
>>2093142
Мне размер не важен, просто я пробую писать малварь на расте, а там эта хуйня остаётся для ресёрчеров всяких.
>>2093143
sstrip
Аноним 11/07/21 Вск 17:23:27 #422 №2093146 
>>2093144
> а там эта хуйня остаётся для ресёрчеров всяких
Просто не используй ассерты в своём коде и всё. Эта самая хуйня роли не играет, т.к. в дизассемблере стандартные библиотеки распознаются по сигнатурам, отсутствие ассертов им не помешают. Я тут вижу только два варианта: хардкор с #[no_std] или пересборку std с патченым кодом assert-а.
Аноним 11/07/21 Вск 17:32:11 #423 №2093154 
>>2093146
>пересборку std с патченым кодом assert-а
Очевидно придётся делать это. А нет никакого таргета для embeded, где бы уже было пропатчено? В данный момент интересует только линукс, но с прицелом сборки таргета под вынь.
Аноним 11/07/21 Вск 17:37:28 #424 №2093157 
>>2093154
Точно нет, любая платформа, которая потянет libstd, не будет экономить на спичках :) Да и кончай заниматься хуйнёй - перед C в написании малвары у Раста никаких преимуществ.
Аноним 11/07/21 Вск 17:40:17 #425 №2093159 
Да понятно что сишка топ, но стало модным переписывать на руст, вот и я не хочу отставать. Ладненько, спасибо за советы, девочки.
Аноним 11/07/21 Вск 18:35:48 #426 №2093226 
12747731572394-b-4ad8.gif
>начал пушить растбук
>привет_мир в 3 мегабайта
Аноним 11/07/21 Вск 18:37:42 #427 №2093229 
>>2093226
>после стрипа 300 килобайт
в микруху можно завернуть
Аноним 11/07/21 Вск 19:51:38 #428 №2093260 
>>2093226
Есть способы снизить вес: https://github.com/johnthagen/min-sized-rust
Так-то Сишка тоже не фонтан - при static линковке хеллоуворлд занимает аж 800КБ. Добро пожаловать в 2021, где всем похуй.
Аноним 11/07/21 Вск 22:55:17 #429 №2093411 
Блядь, третий раз зашёл на изучение раста и просто охуеваю от качества кода. Блядь, нет ни одного другого языка, где бы так относились к вкатывальщикам в этот пиздец. Ладно там docs.rs совершенно неюзабельная параша, такой формат документации ломает судьбы и калечит психику. Но, блядь, для кого вы в ридми пишите примеры использования ваших уебанских библиотек, если вы, блядь, через день меняете название методов и хуй забиваете на документацию? Никто, от плюсанов до джаваскриптопитухов, так не делает. Блядь, четыре часа сижу пытаясь распарсить жсон в структуру с самоподписанным сертификатом и нихуя, блядь, не могу. Чувствую себя полным говном.
Идите вы нахуй со своим пидарастическим языком. никогда, блядь, я к нему больше не притронусь. Сидишь как долбоёб какие-то mut'ы клепаешь вместо продуктивной работы. Пиздец нахуй.
Аноним 11/07/21 Вск 22:58:09 #430 №2093416 
Есть ли основания полагать, что внутри компилятора Rust'а заложен бэкдор? Не особо понимаю тему, но читал, что там в основе какие-то блобы.
Просто реально подозрительно выглядит его пропихивание во все щели.
Аноним 11/07/21 Вск 22:59:46 #431 №2093419 
>>2093416
> там в основе какие-то блобы.
Нет там блобов, он полностью опенсорсный. Если конечно речь не идёт про блобы внутри процессоров, но тогда раст ничем от других языков не отличается.
Аноним 11/07/21 Вск 23:14:16 #432 №2093443 
>>2093416
Есть ли основания полагать, что коронавирус — это заговор рептилоидов?

Ну и по теме: кроме rustc есть ещё cranelift, а ещё пилят фронтэнд под GCC. Но в расте просто слишком дохуя всякой хуйни, написать компилятор раста — это не хуй дёрнуть. Там даже парсер синтаксиса должен кучу хуйни распарсить, а уж доказывать лайфтаймы и exhaustiveness паттерн матчинга — это вообще пиздец. Но лично ты можешь считать, что там есть бекдор, и каждый раз когда ты компилируешь свой хелловорлд тебе вскрывают анус.
Аноним 11/07/21 Вск 23:16:45 #433 №2093445 
.JPG
>>2093419
>>2093443
Вспомнил, где про это читал:
https://old.reddit.com/r/rust/comments/2tdsev/compilers_with_backdoors/

Получается так, что в основе Rust-компилятора какие-то блобы на OCaml.
Аноним 11/07/21 Вск 23:17:08 #434 №2093446 
>>2093411
Да обычное там качество кода. Пиздец нахуй - это когда я в Ноде искал LDAP-клиент, и единственный доступный не умел логиниться кроме как через plaintext. Про docs.rs вообще смешно - в Си/Си++, ЖС и Петоне вообще нет общего репозитория документации, самое близкое - readthedocs, в который она заносится вручную. Но я тоже ощущаю, что вместо написания кода я занимаюсь хуйнёй: безопасность работы с памятью не стоит многочасовой ебли с лайфтаймами.
Аноним 11/07/21 Вск 23:19:09 #435 №2093448 
>>2093445
> Получается так, что в основе Rust-компилятора какие-то блобы на OCaml.
Не в основе. Это для бутстрапинга (т.е. создания компилятора с нуля). Версия на окамле тоже была опенсорсной (она и сейчас есть в гит-истории репы). К тому же современный раст можно бутстрапить с мраста, который компилируется любым компилятором Си.
Аноним 11/07/21 Вск 23:19:31 #436 №2093449 
>>2093445
> какие-то блобы на OCaml
Вернее, просто какие-то древние блобы, из которых бустрапят OCaml.
Конечно, такая закладка была бы эпичной.
Аноним 11/07/21 Вск 23:20:43 #437 №2093452 
deusexhand.jpg
>>2093445
Блять, заговор тянется аж с 96 года, пиздец просто.
Аноним 11/07/21 Вск 23:36:39 #438 №2093469 
>#[tokio::main]

Что за макрос такой?

Аноним 11/07/21 Вск 23:42:43 #439 №2093473 
>>2093469
Фигачит синхронную функцию, в которой заводит токийский рантайм, и блочит этот рантайм на выданной ему асинхронной функции, пока функция не вернёт результат.
Аноним 12/07/21 Пнд 01:31:44 #440 №2093492 
Блять, да как заигнорить самоподписаный сертификат в этом сраном reqwest?
Аноним 12/07/21 Пнд 03:11:51 #441 №2093498 
>>2093492
https://docs.rs/reqwest/0.11.4/reqwest/struct.ClientBuilder.html#method.danger_accept_invalid_certs
Сама ты блядь, у нас в Ржавом всё по любви, как видишь
Аноним 12/07/21 Пнд 09:40:57 #442 №2093581 
>>2093492
Проще curl подлкючить через сишные биндинги, нормальных http-клиентов в расте нет.
Аноним 12/07/21 Пнд 10:58:46 #443 №2093676 
Забить на карго и делать всё лапками - хорошая практика?
Аноним 12/07/21 Пнд 10:59:52 #444 №2093678 
>>2093676
Какой в этом потаённый смысл?
Аноним 12/07/21 Пнд 11:28:33 #445 №2093696 
>>2093676
> Забить на карго
Разве что если вместо карго хочешь использовать более мощный базел с полусырой интеграцией с растом: https://github.com/bazelbuild/rules_rust

Ручками делать - мазохизм.
ping Аноним 12/07/21 Пнд 12:43:31 #446 №2093765 
Для го есть либа github.com/go-ping/ping пинг без рута/сеткапа. Есть аналогичная для раста?
Аноним 12/07/21 Пнд 13:04:24 #447 №2093783 
>>2092800
Переходил с Го на раст еще есть Си\С++-бекграунд. На расте де-факто получается быстрее писать, потому что борроу чекер, человеческая обработка ошибок, коллекции реализованы куда приятнее, чем в ГОвне. Зачастую, как бы странно не звучало, борроу чекер помогает тебе писать быстрее не только с точки зрения мемори-сейфти, но еще и с точки зрения логики. Поэтому, на расте примерно на ~15% быстрее получается писать кодяру.

Не знаю, как это конкретно работает, но часто замечал, что на расте я меньше обсираюсь именно в логике.
перешел с го-веба в раст-мультимедиа
Аноним 12/07/21 Пнд 13:11:50 #448 №2093789 
Такс, девочки. Поясните, пожалуйста, если я в features говорю использовать rustls, почему тянется openssl-sys? openssl-sys под musl компилится какими-то костылями с гитхаба, которые я не хочу тянуть в систему.
Аноним 12/07/21 Пнд 14:48:04 #449 №2093878 
>>2093783
Кмк, Раст хорош, когда у тебя нет произвольных ссылок между объектами, а большая часть методов может быть написана в функциональном стиле. Тогда тебе и лайфтаймы кроме 'static указывать не нужно, и сам подход универсален и экономит нервы что в Расте, что в Си++. Тут язык действительно экономит время, т.к. в нём очень многое сделано правильно - те же модули, или возможность определять трейты для любых классов, даже для стандартной библиотеки. Но как только у тебя деревья объектов превращаются в графы объектов, начинается хоррор-стори, и хочется сбежать куда угодно, хоть в Си++, хоть в Го, хоть в Паскаль.
Аноним 12/07/21 Пнд 15:03:46 #450 №2093891 
>>2093878
> начинается хоррор-стори
Не начинается. Используешь стандартные (A)Rc<Refcell<...>> и всё работает как надо. Хоррор-стори будет только если ты при этом захочешь избавиться от лишних счётчиков, проверок и выделений памяти. Тогда и приходится пердолиться с ансейф.
Аноним 12/07/21 Пнд 16:12:59 #451 №2093954 
>>2093891
Если бы я не хотел эффективности, я не стал бы ебать себе мозг Растом и ушёл бы на Nim какой-нибудь. Счётчика ссылок было бы достаточно.
Аноним 12/07/21 Пнд 19:09:48 #452 №2094189 
А как проблема с произвольными ссылками решается в труъ функциональных языках? Во всех них есть GC?
Аноним 13/07/21 Втр 09:50:36 #453 №2094525 
>>2094189
Языков без GC очень мало, в общем-то, функциональных без GC вообще нет.
Аноним 13/07/21 Втр 12:19:24 #454 №2094626 
>>2092800
>C# и java забыл скзаать что это языки прошлого поколения, не трать время, когда есть next gen как Го и Раст за которыми будущее.

Огромный и тяжелый энтерпрайз так и останется на джаве. Всякие сетевые поделия на говне, системщина на расте. Но бабло все в энтерпрайзе, тем более что у джавы сейчас отличные инструменты и экосистема. Вообще имхо чтобы вкатиться на работку лучше как раз учить жабу и жс, а не го и тем более раст.
Аноним 13/07/21 Втр 12:24:28 #455 №2094629 
>>2092969
>ООП
Внезапно, от ООП никуда так и не ушли, так как функциональщина и процедурность хуже подходят для построения рабочего софта. ООП повсюду. Если на фронтенде и на каких-нибудь пхп серверах его немного, то вот настоящий бекенд для огромных корпорация полностью завязан на ООП, так как это самый лучший вариант выразить бизнес-логику в коде.
Аноним 13/07/21 Втр 17:12:08 #456 №2094869 
>>2094629
Процедурность понятно, а чем функциональщина плоха? Особенно в языках, в которых компиляция == корректная работа программы. Мне кажется что функциональщина просто слишком сложна для армии индусов и порриджей которые пилят современное ПО.
Аноним 13/07/21 Втр 17:19:16 #457 №2094873 
>>2094869
Функциональность обычно ещё и очень медленная из-за её любви к иммутабельности, что выражается в том, иногда необходимо копировать кучу информации. Например если надо изменить один элемент массива очень желательно скопировать весь массив и уже в новом изменить элемент. Обычно решается всякими особенными коллекциями (например связанными списками вместо массивов), но из-за особенностей современных пекарен (относительно медленная память+быстрые кеши внутри процессоров) массивы работают гораздо быстрее (если сумеют полностью вместиться в кеш).
Аноним 13/07/21 Втр 17:55:13 #458 №2094912 
>>2094869
Обычно функциональщики как и ООП дауны слепо верят парадигме и отрицают любые аргументы против их подхода.

Но небыдло такое как я уже давно всё поняло, и юзает всякие OCaml/F# франкенштейны в продакшене, где когда нужно - вытаскиваются поинтеры из темных подземелий или мутабельные коллекции, а где нужна корректность программ и чистота кода - пишут на чистом ФП.

Борщи бугуртят, быдло не осиливает, пока мы на двух стульях на самом деле там 3+ стула сидим и разминаем простату, получая от этого удовольствие.
Аноним 13/07/21 Втр 17:56:59 #459 №2094914 
>>2094912
Ещё Скалу забыл к адской семейке серебрянных пуль, но я никогда JVM family не юзал в продакшене.
Аноним 13/07/21 Втр 18:03:15 #460 №2094917 
image.png
>>2080710
>crystal
CoCk

https://github.com/crystal-lang/crystal/blob/master/CODE_OF_CONDUCT.md
Аноним 13/07/21 Втр 21:28:01 #461 №2095117 
>>2094869
>компиляция == корректная работа программы
Это что за языки? с пруверами?
>>2094873
Компиляторы функциональных языков обычно умееют хорошо оптимизировать, поэтому вместо копирования под капотом могут быть ссылки. Это было даже в ml.
Аноним 13/07/21 Втр 22:54:54 #462 №2095173 
>>2093783
А если ООПшно писать, тоже быстро на ~15%

>>2093765
https://github.com/orf/gping сойдет?
Аноним 14/07/21 Срд 00:04:29 #463 №2095225 
>>2094189
Регионы.

https://ru.m.wikipedia.org/wiki/Управление_памятью_на_основе_регионов

http://mlton.org/Regions

https://elsman.com/mlkit/pdf/mlkit-4.3.0.pdf
Аноним 14/07/21 Срд 00:07:30 #464 №2095226 
>>2094629
> ООП, так как это самый лучший вариант выразить бизнес-логику в коде.

Самый хуевый.
Бизнестребования по своей природе декларативны, а оопе-параша - это просто надстройка над процедурщиной.
Аноним 14/07/21 Срд 01:11:40 #465 №2095261 
>>2095117
>Компиляторы функциональных языков обычно умееют хорошо оптимизировать
Выше приводил пример qsort на Поцкеле. Ни выполнить его на этапе компиляции, ни даже просто выдать внятный код, компилятор ghc не осилил.

А вообще, самое смешное, что есть в ФП - это долбоёбы, которые своими же руками пишут, по сути, говёного качества процедурный код (т.к. он пишется в терминах языка, а не бизнес-логики), и считают себя элиткой ФП. Это касается дрочеров ф-шарпа и скалы в первую очередь. А-у, задроты, вас наебали - если нет упаковки побочных эффектов в монады, то перед вами засутенёренный императивный язык. Это элементарно проверяется - код на таких языках строка-в-строку переносится в Си++. Вы же не настолько ебанулись, чтобы кресты считать функциональными?
Аноним 14/07/21 Срд 07:32:27 #466 №2095298 
Объясните - в чём принципиальная разница между затенением переменных, и использованием изменяемых переменных

Проще говоря, что лучше и в каких ситуациях использовать?
1)
let x = 2;
let x = x 2;

2)
let mut x = 2;
x = x
2;
Аноним 14/07/21 Срд 07:33:18 #467 №2095300 
>>2095298
Макаба знак уможения съела
Аноним 14/07/21 Срд 08:48:53 #468 №2095329 
>>2092800
>знаний в области программирования нет никаких
>не трать время, когда есть next gen как Го и Раст

"Охуенные" языки для старта, особенно когда дойдет до парадигм, ну кароч пук среньк у нас тут интырфейс, который реализует метод.
Погодите а что такое тырфейс, инкапсуляция ? ну кароч это Кофеварка, ну ты понял.
Я так в жс вкатился, а там костыли пытающиеся подражать джаве. Ни одной книги фундаментальной по ООП не нашел, что бы все понятно разжевали. Про го с нуля промолчу.
Ну это имхо конечно же.
Аноним 14/07/21 Срд 09:45:16 #469 №2095355 
>>2095298
> Объясните - в чём принципиальная разница между затенением переменных, и использованием изменяемых переменных
Например, затенённые переменные восстановятся после внутреннего скопа
let x = 2;
{
let x = 10;
println!("{}", x);
}
println!("{}", x);

Выведет:
10
2
Аноним 14/07/21 Срд 09:52:38 #470 №2095361 
>>2095329
>Погодите а что такое тырфейс, инкапсуляция ?
> Ни одной книги фундаментальной по ООП не нашел
А нужна ли для этого книга? Это же по большому счёту конвенция. Прочитал, пару абзацев рациональ, для чего так делается; прочитал, как в знакомом тебе языке это синтаксически реализуется; и, вроде, всё. Что там ещё можно по этому поводу изучить? Если очень хочется легализ уровня стандартов языка почитать, то это в статьи, ане в книжки.
Аноним 14/07/21 Срд 13:12:12 #471 №2095543 
>>2095298
Нужно помнить что у неиспользуемой больше переменной будет вызван drop
Аноним 16/07/21 Птн 09:23:26 #472 №2097159 
Блять, хули у него установка такая ебанутая? Какой раз уже на него перекатываюсь, постоянно на установке хуй забиваю просто в рот ебал это говно, охуеть блять просто пиздец, какой то нахуй Visual Studio C++ Build tools требует еще и Win10 SDK с инглиш пакетом да пошел ты нахуй охуеть можно просто пиздец
Аноним 16/07/21 Птн 09:39:05 #473 №2097166 
>>2097159
Потому что винда мастдай.

А вообще, просто загугли как поставить pc-windows-gnu тулчейн под mingw.

https://rust-lang.github.io/rustup/installation/windows.html#windows
Аноним 16/07/21 Птн 11:40:58 #474 №2097247 
>>2097166
Пиздец аж на линукс захотелось, столько языков уже отбросил нахуй из за ебанутой установки и компиляции просто пиздец, однако весь настроенный софт на винде и хуй знает как все это теперь на лин переносить
Аноним 16/07/21 Птн 12:26:37 #475 №2097310 
>>2097247
Докер или виртуалка. Хули ты как виндузятник себя ведёшь.
Аноним 16/07/21 Птн 12:51:47 #476 №2097338 
>>2097310
Дополню, можно дуалбут накатить.
мимо
Аноним 16/07/21 Птн 12:56:46 #477 №2097340 
>>2097338
Так и планирую, сижу щас думаю какой лин накатить на мой древний ноут
Аноним 16/07/21 Птн 13:27:59 #478 №2097380 
Нинужно. Visual Studio Code умеет работать через SSH. С виртуалкой очень удобно.
Аноним 16/07/21 Птн 13:28:19 #479 №2097381 
>>2097338
--> >>2097380
Аноним 16/07/21 Птн 13:51:57 #480 №2097420 
>>2097340
Какой-нибудь Mint Xfce, если совсем древний. Но если ноут 32-bit, то ты самую последнюю версию поставить не сможешь.

>>2097380
Ноут древний, куда ты виртуалку хочешь ставить.
Аноним 16/07/21 Птн 14:03:39 #481 №2097438 
>>2097420
arch + i3 либо sway самый идеальный вариант будет для древнего пк и 64 бит поставится
Аноним 17/07/21 Суб 18:55:30 #482 №2098776 
>>2097247
Установи пакеты, это гораздо проще, чем софт искать и настраивать.
Аноним 17/07/21 Суб 20:50:49 #483 №2098908 
Какие либы для gui юзаете?
Аноним 17/07/21 Суб 23:09:32 #484 №2099003 
>>2098908
https://crates.io/crates/winit
Аноним 18/07/21 Вск 22:12:00 #485 №2099953 
>>2065719
Я не смог вкатиться в Джаву из-за ООП и классов, ты хочешь сказать что в Руби тоже сплошное ООП? Но синтаксис там очень нравится
Аноним 18/07/21 Вск 22:26:29 #486 №2099968 
>>2065035
Там тоже консоль и прочее? Возможно параллельно учить этот ЯП и Раби?
Аноним 19/07/21 Пнд 13:22:38 #487 №2100308 
Хочу вкатиться в программирование графики на Vulkan.

Погуглили - не нашёл ни ождного нормального ресурса, посвящённому связке Vulkan + Rust. Может кто-нибудь знает годные гайды? Можно а Ангельском
Аноним 19/07/21 Пнд 14:20:26 #488 №2100397 
>>2100308
А их вроде и нету
Лучше начинай с плюсов/си, будет проще
Аноним 19/07/21 Пнд 14:49:23 #489 №2100418 
>>2100308
https://lib.rs/crates/ash
https://github.com/unknownue/vulkan-tutorial-rust

Но больше вроде бы нет ничего, так что хуярь обычные вулканские туториалы, а потом переноси на раст.
Аноним 19/07/21 Пнд 15:36:29 #490 №2100460 
>>2100397
Чтобы начать с плюсов/Си, надо сперва разобраться с этими языками, и их ебанутыми системами сборки, зависимостями (Который нихуя не желают просто так брать и устанавливаться, ебанутыми IDE-шками, которые превратили язык программирования в отдельную программу и прочим дерьмом.

Нет уж, спасибо...
Аноним 19/07/21 Пнд 16:20:12 #491 №2100497 
>>2100460
>виндопроблемы
Аноним 19/07/21 Пнд 18:00:27 #492 №2100603 
Блять, как раст на винду поставить? Учитывая, что установка у него заебистая, не хочу все эти vs библиотеки качать, которые еще и sdk ебаные требуют, в пизду. Cygwin не под раст. Линукс как 2 ос ставить - самый последний вариант, неужели других нет, че делать то пиздец?
Аноним 19/07/21 Пнд 18:04:15 #493 №2100605 
>>2100603
> Линукс как 2 ос ставить - самый последний вариант
Vagrant + виртуалка с убунтой под каждый проект. Сам так делаю, зависимость есть
Аноним 19/07/21 Пнд 18:12:43 #494 №2100617 
>>2100605
Интересно, пока изучаю
Аноним 19/07/21 Пнд 19:36:06 #495 №2100668 
>>2100603

>>2097166
>просто загугли как поставить pc-windows-gnu тулчейн под mingw
Аноним 20/07/21 Втр 09:50:34 #496 №2100986 
>>2100668
>как поставить pc-windows-gnu тулчейн под mingw
Бля говорят в имя хоста писать x86_64-pc-windows-gnu, но это ведь только для 64, а про i686-pc-windows-gnu нихуя не написано, пиздец надеюсь прокатит
Аноним 20/07/21 Втр 10:09:00 #497 №2101011 
>>2100986
Ебать получилось! Странно, что раст так легко поставить на самом деле, хотя нигде про это особо не пишут и хотят чтоб юзали msvc, пиздец а я уже линукс поставил ради него ну ебаный в рот, столько дней ебался, а тут такая легкая установка просто охуеть можно, спасибо анонам.
Аноним 20/07/21 Втр 13:06:25 #498 №2101202 
изображение.png
изображение.png
>>2100603
https://www.rust-lang.org/tools/install
Аноним 20/07/21 Втр 13:44:22 #499 №2101244 
>>2101202
Неа хуйня, там по умолчанию msvc и windowds sdk всякие нужно скачивать и хуй догадаешься, что оказывается надо кастом сеттингс делать и писать туда i686-pc-windows-gnu чтоб все заебись поставилось, с чем мне и помог другой анон
Аноним 20/07/21 Втр 13:57:25 #500 №2101259 
>>2101244
Ну хуй знает. У меня всё моментально поставилось. Доволен как слон.
Аноним 20/07/21 Втр 14:03:17 #501 №2101275 
>>2101259
Блять, а как я то теперь доволен, это просто пизда, столько дней возился, а фикс так легок, ну впрочем как и многие баги собственно
Аноним 20/07/21 Втр 14:05:02 #502 №2101281 
>>2101244
>>2101259
Блядь, накатите нормальную систему для программирования. Зачем над собой издеваться?
Аноним 20/07/21 Втр 14:07:11 #503 №2101288 
>>2101281
Нормальную - это какую?
Аноним 20/07/21 Втр 14:08:39 #504 №2101291 
>>2101288
Винду с WSL.
Аноним 20/07/21 Втр 14:09:32 #505 №2101293 
>>2101281
Блять, ну мы же не 24/7 программируем, иногда хочется и отдохнуть, поиграть в ченить, фотошоп бля нормально без костылей запустить, зайти в привычные приложения которые онли под винду, не перезапускать же комп каждый раз из за этого, чтоб сменить ос
Аноним 20/07/21 Втр 14:10:23 #506 №2101296 
>>2101291
WSL это охуенно....
Вот только при работе с графикой мгут траблы возникать
Аноним 20/07/21 Втр 14:10:41 #507 №2101299 
>>2101291
wsl ни нужон ибо только под дрисятку. да и нахуя если все под винду устанавливается с должным усилием
Аноним 20/07/21 Втр 14:36:33 #508 №2101338 
>>2101288
>Нормальную - это какую?
Любую UNIX-like систему. Линух, БСД, гейось.

>>2101293
Виртуалка?
>не перезапускать же комп каждый раз из за этого, чтоб сменить ос
Вообще проблемы не вижу, ты же не каждые полчаса переключаешься. У меня давно такой порядок: винда - для развлечений, линух - для работы. Ибо винда после установки софта для программирования сразу превращается в мусорку.
Аноним 20/07/21 Втр 14:50:48 #509 №2101366 
>>2101288
макос
Аноним 20/07/21 Втр 15:01:50 #510 №2101379 
>>2101338
> Любую UNIX-like систему. Линух, БСД,
Это всё конечно охуенно, но на работе у меня шинда
> гейось
>>2101366
> макос
Я конечно не спорю с тем, что я пидор. Но не настолько же...
Аноним 20/07/21 Втр 15:32:37 #511 №2101428 
>>2101379
>Это всё конечно охуенно, но на работе у меня шинда
Ты на работе на расте пишешь?
Аноним 20/07/21 Втр 15:34:14 #512 №2101432 
>>2101428
Периодически, для каких-то мелких задач
Аноним 20/07/21 Втр 15:44:15 #513 №2101445 
>>2101432
Просто вся работа программиста на винде происходит в IDE, а любой шаг в сторону вызывает лютую попаболь.
Аноним 20/07/21 Втр 17:53:40 #514 №2101628 
image.png
Так бля, че началось то блять? Какого то хуя в саблайме скобка как то рандомно ставится, то как надо прилипая слева, то блять посреди кода нахуй в воздухе, у кого так же было? Как фиксить пиздос
Аноним 20/07/21 Втр 21:08:35 #515 №2101866 
>>2101628
>Как фиксить
cargo fmt
Аноним 20/07/21 Втр 21:44:25 #516 №2101919 
image.png
image.png
Нихуя прикол, крч по фану затестил функцию чисел фибоначчи с числом 42 на старом ноуте:
Rust - 1.6s
Lisp (racket) - 3.7s (cpu time: 3666 real time: 3745 gc time: 0) (и 0.5s время компиляци)
C++ 4.2s (и 0.7s время компиляции)

Хуй знает как так, видимо для с++ надо 999 флагов еще написать при билде, чтоб хоть как то оптимизированно было, но хуй знает, везде по стандарту в релиз билдил и все ниче не знаю нахой
Аноним 20/07/21 Втр 21:51:58 #517 №2101933 
>>2101919
Ты растовский вариант считаешь встроенными средствами, а остальные таймерами ОС? Так там секунды могут на загрузку библиотек и прочие шаманства при запуске уходить.
Аноним 20/07/21 Втр 21:58:23 #518 №2101945 
>>2101933
А бля точно сорри, я только с с++ забыл time ебануть, в лисп не забыл там все норм, но хз насколько это улучшит показатели с++ , завтра тогда затестирую
Аноним 20/07/21 Втр 22:39:40 #519 №2101971 
Поясните за Ржавого в вебе. Котируется?
Аноним 20/07/21 Втр 23:53:23 #520 №2102018 
>>2058873
>>2057815

Проблема пориджей, не знакомых ни с какими структурами данных кроме массивов и хэшмапов погуглите что такое object pools хотя бы.
Аноним 20/07/21 Втр 23:56:35 #521 №2102024 
>>2058777

Потому что "модна", перспективный язык. А так, из системных языков больше ламповый Си нравится.
Аноним 21/07/21 Срд 00:09:49 #522 №2102046 
>>2077493

php
Аноним 21/07/21 Срд 00:27:32 #523 №2102062 
Какой самый труъ способ абстракции зависимостей, которые должны храниться в структуре, но не будут меняться в рантайме?

trait SomeTrait {}

struct Foo {
dep: SomeTrait // вот так не работает без Box<dyn SomeTrait>, большой ли рантайм кост у такого способа?
}

struct Bar<TDep: SomeTrait> {
dep: TDep
} // при добавлении новых зависимостей, придётся добавлять новые дженерики.
Аноним 21/07/21 Срд 00:29:40 #524 №2102064 
>>2102062
Или это не раст-вей, и всё передаём как есть?
Аноним 21/07/21 Срд 07:22:32 #525 №2102117 
>>2101445
У меня как-то наоборот, Visual Studio вызывает жопоболь. Просто не перевариваю я эту IDE-шку

Мне проще в Notepad++ код написать и запустить Cargo run, чем настраивать всё под визуалку, пытаться понять - что там наговнокодили мелкомягкие и т.д.

Хотя вообще, есть годный плагин для Pycharm-a, и сейчас я пользуюсь им
Аноним 21/07/21 Срд 10:29:33 #526 №2102207 
>>2102062
>зависимостей, которые должны храниться в структуре, но не будут меняться в рантайме?
&'static? Или что тебе нужно?
Аноним 21/07/21 Срд 10:47:04 #527 №2102222 
image.png
>>2101933
Ну хуй знает чел, раст все равно обгоняет, а это еще учитывая, что я с флагами для с++ поебался, поставил чтоб оптимизированно было, на скрине до/после оптимизации и все равно раст лидирует лол
Аноним 21/07/21 Срд 12:13:03 #528 №2102320 
>>2102117
А чего не VScode?

>>2101919
У тебя хвостовая рекурсия, с этой хуетой ты смело можешь пойти на хуй, потому что компиляторы нихуя не гарантируют по этому поводу. Если ты собирал кресты с GCC, а раст с LLVM то просто разница в оптимизации хвостовой рекурсии, а нихуя не разница в языках.
Аноним 21/07/21 Срд 12:21:24 #529 №2102328 
>>2102320
задушнил
мимо
Аноним 21/07/21 Срд 12:41:08 #530 №2102345 
>>2102320
Спасибо, что объяснил.
тоже мимо
Аноним 21/07/21 Срд 13:13:59 #531 №2102375 
Как без лишней ебли, внедрить в ехе файлы, которые я читаю через std::fs например? Не хочу чтобы рядом с ехешником были эти файлы, но при этом система должна их увидеть.
Аноним 21/07/21 Срд 13:19:01 #532 №2102380 
>>2102375
static FOO_FILE: &[u8] = include_bytes!("foo");
Аноним 21/07/21 Срд 13:21:10 #533 №2102383 
>>2102380
P.S. Там есть ещё include_str!(); если файлы текстовые, сразу строку тебе сделает.
Аноним 21/07/21 Срд 13:29:52 #534 №2102393 
>>2102380
Типа при компиляции файл уже войдет в ехе благодаря этой теме? А есть ли более универсальный способ? Вдруг я какой нибудь библиотекой импортирую изображение, которое юзер тоже не должен видеть рядом с ехе.
Аноним 21/07/21 Срд 13:34:44 #535 №2102405 
>>2102393
Если изображение статично в рантайме (то есть известно на этапе компиляции и не будет изменяться), то хуяришь его тем же статиком в либу. А если оно не статично, то как ты его в статичный exe хочешь захуярить?
Аноним 21/07/21 Срд 13:40:06 #536 №2102409 
image.png
>>2102405
Ок буду пробовать пасиб

Вопрос №2
Нахуя столько лишних папок и файлов создается при cargo build --release? Достаточно ведь всего одного ехе файла который я на другом пк тестил и все работало без этих ебаных папок.
Можно ли как то отключить их создание при билде?
Аноним 21/07/21 Срд 13:42:42 #537 №2102412 
>>2102409
Нельзя, они все нужны, чтобы собрать конечный .exe файл.
Но конечный файл потом из папки можно отдельно вытаскивать куда хочешь, офк, а /target/ почистить с помощью cargo clean.
Аноним 21/07/21 Срд 15:25:58 #538 №2102533 
>>2102409
> Нахуя столько лишних папок и файлов создается при cargo build --release?
Туда складывается выхлоп растовского компилятора и ллвм. Позволяет например делать относительно быстрые инкрементальные билды (когда поменял в коде одну строчку и не надо заново компилировать весь проект со всеми зависимостями).
Аноним 21/07/21 Срд 17:21:43 #539 №2102672 
image.png
Попробовал я ваш раст, значит. И как плюсовик со стажем заявляю, что раст - это полное блаженство. Уебищный синтаксис и спагетти из символов, на первый взляд, оказались вполне логичными и удобными. В общем, желаю языку дальнейшего развития, чтобы я смог пересесть на него полноценно.
Аноним 21/07/21 Срд 17:40:45 #540 №2102707 
>>2102672
В смысле, а что сейчас мешает пересесть полноценно?
Аноним 21/07/21 Срд 17:46:56 #541 №2102714 
>>2102062
Можешь попробовать https://doc.rust-lang.org/rust-by-example/custom_types/enum.html
Аноним 21/07/21 Срд 20:18:52 #542 №2102944 
>>2102707
>В смысле, а что сейчас мешает пересесть полноценно?
В основном из-за отсутствия большого количества работы на рынке. Да и подожду, что Линус скажет по поводу раста в ядре линукс.
Аноним 21/07/21 Срд 20:40:52 #543 №2102964 
>>2102944
>Да и подожду, что Линус скажет по поводу раста в ядре линукс.
Ты собрался стать мейнтенером ядра?
Аноним 21/07/21 Срд 23:22:22 #544 №2103079 
>>2102964
>Ты собрался стать мейнтенером ядра?
Нет, просто мы на работе системщину пишем, а для этих целей, сам понимаешь, выбор языков небольшой. А добавления раста в линукс был бы хорошим звоночком для применения последнего в системщине.
Аноним 21/07/21 Срд 23:23:31 #545 №2103080 
>>2103079
было бы*
фикс
Сделайте перекат
Аноним 22/07/21 Чтв 08:59:18 #546 №2103201 
>>2102062
Рантайм кост у такого способа как у таблицы виртуальных функций. https://stackoverflow.com/questions/62207849/how-does-boxdyn-trait-deconstruct-itself
Аноним 22/07/21 Чтв 23:43:59 #547 №2104043 
Почему для компиляции раста требуется плюсовый компилятор? Я не троллю и вообще джун, мне действительно интересно.
Аноним 22/07/21 Чтв 23:45:36 #548 №2104046 
>>2104043
Операционная система у тебя на каком языке написана? Поэтому.
Аноним 22/07/21 Чтв 23:51:21 #549 №2104052 
>>2100603
WSL2
Аноним 23/07/21 Птн 00:21:03 #550 №2104073 
>>2104043
Не компилятор, а линкер, это раз.
Только на винде, это два.

Хотя по второму пункту могу пиздеть, может на линупсе тоже какую-то сишную либу тянет для линковки.
Аноним 23/07/21 Птн 11:32:35 #551 №2104267 
Поясните кто-нибудь за WinAPI
Вот есть в доках Microsoft такая функция:
https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessasusera

Я хочу её вызвать. Открываю документацию к крейту который вроде как даёт открывает доступ к winapi:
https://docs.rs/windows/0.17.2/windows/
The windows crate lets you call any Windows API past, present, and future using code generated on the fly directly from the metadata describing the API and right into your Rust package where you can call them as if they were just another Rust module.

Пытаюсь найти в доках эту функцию - её нет.

Как эту залупу вызвать?
Аноним 23/07/21 Птн 11:51:13 #552 №2104282 
>>2104267
Я такую нашел https://docs.rs/winapi/0.3.9/winapi/um/processthreadsapi/fn.CreateProcessAsUserW.html
Аноним 23/07/21 Птн 11:55:06 #553 №2104287 
>>2104282
Выглядит интересно. Спасибо.
Знать бы ещё насколько это васянство, и насколько криво это работает.
Аноним 23/07/21 Птн 11:58:37 #554 №2104297 
>>2104287
Стой. Ты выбрал правильную либо походу. Она официальная.

Просто там надо через use подключать сначала https://microsoft.github.io/windows-docs-rs/doc/bindings/Windows/Win32/System/index.html?search=CreateProcessAsUser

Тут написано как подключать. Пример есть https://github.com/microsoft/windows-rs
Аноним 23/07/21 Птн 12:01:26 #555 №2104303 
>>2104297
> Тут написано как подключать. Пример есть https://github.com/microsoft/windows-rs
Я читал этот вводный гайд. Но так нифига из него и не понял.
Наверное слишком тупой

Аноним 23/07/21 Птн 12:40:10 #556 №2104322 
>>2104303
Единственное что там необычно новичку - это билд-скрипт (почитать про них можно тут https://doc.rust-lang.org/cargo/reference/build-scripts.html ) Это отдельный файл в корне твоего проекта (build.rs). Написано что в него надо запихать указания что надо взять из библиотек винАПИ.
Аноним 23/07/21 Птн 12:46:08 #557 №2104328 
То есть в cargo.toml:
[code]
[dependencies]
windows = "0.17.2"

[build-dependencies]
windows = "0.17.2"
[/code]

В build.rs:
[code]
fn main() {
windows::build! {
Windows::Data::Xml::Dom::,
Windows::Win32::Foundation::CloseHandle,
Windows::Win32::System::Threading::{CreateEventW, SetEvent, WaitForSingleObject},
Windows::Win32::UI::WindowsAndMessaging::MessageBoxA,
};
}
[/code]

И в main.rs:
[code]
mod bindings {
windows::include_bindings!();
}

use bindings::{
Windows::Data::Xml::Dom::
,
Windows::Win32::Foundation::CloseHandle,
Windows::Win32::System::Threading::{CreateEventW, SetEvent, WaitForSingleObject},
Windows::Win32::UI::WindowsAndMessaging::{MessageBoxA, MB_OK},
};

fn main() -> windows::Result<()> {
let doc = XmlDocument::new()?;
..................................
[/code]
Аноним 23/07/21 Птн 12:48:15 #558 №2104330 
>>2104328
Пиздос.
Аноним 23/07/21 Птн 13:20:00 #559 №2104353 
>>2104322
>>2104328
Спасибо. Вроде разобрался
Аноним 23/07/21 Птн 15:56:26 #560 №2104578 
>>2102944
>Да и подожду, что Линус скажет по поводу раста в ядре линукс.
А что он еще не высказался?По-моему он где-то писал что относится к этому нормально
Аноним 24/07/21 Суб 07:36:37 #561 №2105019 
Привет. Возможно ли написать сайт на Rust? Есть ли примеры?
Аноним 24/07/21 Суб 08:58:57 #562 №2105024 
>>2105019
Можно конечно, и примеры есть. Но нет готовых фреймворков чтобы собрать все компоненты необходимые для создания среднего сайта воедино.
https://github.com/steadylearner/Rust-Full-Stack
Аноним 24/07/21 Суб 15:34:36 #563 №2105313 
>>2104073
Сегодня как раз на убунте пришлось ставить линкер.
Аноним 24/07/21 Суб 21:10:37 #564 №2105642 
Что там по блобам в самом расте?
Аноним 24/07/21 Суб 21:30:23 #565 №2105671 
>>2105642
Никаких блобов.
Аноним 25/07/21 Вск 07:02:05 #566 №2105923 
>>2105642
Что такое блоба?
Аноним 25/07/21 Вск 08:47:23 #567 №2105938 
>>2105923
Закладки от NSA.
Аноним 25/07/21 Вск 09:04:38 #568 №2105942 
>>2105938
Только что посмотрел, ни одной закладки от NSA.
/реквест на перекат
Аноним 25/07/21 Вск 09:26:26 #569 №2105960 
>>2105942
Накидайте тогда картинок по расту для переката что ль.
Аноним 25/07/21 Вск 21:18:34 #570 №2106707 
rustembedded.jpg
rustnpm.png
rustc.png
>>2105960
Аноним 25/07/21 Вск 21:19:21 #571 №2106710 
>>2105960
Аноним 26/07/21 Пнд 09:41:45 #572 №2106996 
>>2105019
Привет, как дела? Или это не мне привет, чет не понятно.
Аноним 26/07/21 Пнд 14:09:54 #573 №2107288 
>>2105019
Да хоть на ассемблере.
Аноним 26/07/21 Пнд 14:24:06 #574 №2107298 
Тонем, ржавые. Нужен перекат.
Аноним 26/07/21 Пнд 16:34:19 #575 №2107421 
image.png
image.png
Аноним 26/07/21 Пнд 18:18:36 #576 №2107576 
>>2107298
Да и поебать. Зачем нам двач, мы и так охуенны.
Аноним 26/07/21 Пнд 19:26:55 #577 №2107686 
Когда уже спасут наш тредик? Кто будет этим героем?
Аноним 26/07/21 Пнд 20:37:50 #578 №2107772 
Пока тред не утонул, расскажите вкратце, почему в бэке Go набирает популярность гораздо быстрее Rust? В чём его преимущество (-ва, если их много, конечно)?
Аноним 26/07/21 Пнд 20:47:54 #579 №2107776 
>>2107686
Кто-нибудь по-настоящему крутой. Кто-то, кто умеет ПЕРЕКАТЫВАТЬ ТРЕДю
Аноним 26/07/21 Пнд 20:50:17 #580 №2107780 
>>2107772
Писать легче
Раст сложный язык
Аноним 26/07/21 Пнд 20:53:02 #581 №2107783 
>>2107780
Печаль. Маскот своей няшностью убеждал заскочить на ржавый поезд, а тут вон оно как.
Аноним 26/07/21 Пнд 21:37:31 #582 №2107841 
>>2107776
>Кто-нибудь по-настоящему крутой. Кто-то, кто умеет ПЕРЕКАТЫВАТЬ ТРЕДю
Блядь, как там говорилось? Хочешь сделать хорошо, сделай сам?
Аноним 26/07/21 Пнд 21:43:13 #583 №2107845 
>>2107841
>>2107686
Все, готово. Не так уж это и сложно.

ПЕРЕКАТ: https://2ch.hk/pr/res/2107844.html
ПЕРЕКАТ: https://2ch.hk/pr/res/2107844.html
ПЕРЕКАТ: https://2ch.hk/pr/res/2107844.html
comments powered by Disqus

Отзывы и предложения