Этого треда уже нет.
Это копия, сохраненная 5 июня 2021 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Rust #15 /rust/ 1880122 В конец треда | Веб
Rust — язык, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
https://www.rust-lang.org/

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

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

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

Предыдущий тред: >>1789061 (OP)
3 1880146
>>1880133
Ты хочешь склонировать динамический объект. В расте из коробки нельзя так сделать, нужна либа:

https://docs.rs/dyn-clone/1.0.3/dyn_clone/
16070095171910.jpg95 Кб, 1062x1062
5 1880192
6 1880223
>>1880146
Спасибо большое
7 1880877
>>1880080 →
Строки это фундаментальный тип. Просрав его, в каком-нибудь вебе, начинается бесконечная пляска конвертаций.
8 1880953
>>1880877
Но мы не в вебе, и разница между иммутабельной строкой c известном размером, и контейнером с динамически аллоцируемой хуйней есть.

И нельзя от неё избавиться, потому что изобретут что-то своё костыльное
9 1881433
Товарищи, да здравствует раст - самый лучший в мире язык!
shtolle.jpg9 Кб, 480x360
10 1881817
>>1881433
Нет ты.
11 1881876
Почему нельзя переименовать rust? Я, да и думаю, что не только я, уже заебался гуглить по нему что-нибудь, и получать в выдачу гайды по этой ебанной игре для дебилов.
12 1881882
>>1881876
А go тебе не смущает? Или c? Пишешь rustlang в поисковом запросе и нет проблем.
13 1881923
>>1880953

>Но мы не в вебе


Еще один узко-велосипедный язык, ну нафига?

>разница между иммутабельной строкой c известном размером, и контейнером с динамически аллоцируемой хуйней есть


Давно уже придумали решение неизменяемых строк и отдельных билдеров. Я еще уверен что не бесплатно стоит пройтись по utf-8 символов за аскии.
14 1881934
>>1881923
String это и по сути и есть билдер, в чем твоя проблема?
15 1882179
Дорогой анон, подскажи что я делаю не так? https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=25670f486361ef9331508afc6354f784

Как мне смапить на 264 строчке option так, чтобы тип соответствовал возвращаемому типу функции, нихуя понять не могу? Нужен Option<Box<dyn Expression>>, а выходит только Option<&Box<dyn Expression>>.
17 1882212
>>1882179
Ну и раз уж на то пошло, почитай https://doc.rust-lang.org/stable/std/fmt/trait.Display.html
18 1882213
>>1882209
>>1882212
Спасибо!
19 1882388
>>1881934
В том что нафиг такой билдер нужен. Нужна нормальная строка, чтобы я с юникод мог взять первый или последний символ по человечески, а не только аскии, чтобы не конвертить туда сюда, потому что авторам пригрелся слайс.
20 1882527
>>1882388
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=fc0067f7159768f607c079bd618bc056

Авторам пригрелось тебе показать, что строки это сложно. И получать последний символ ни капли не o(1).
21 1882545
>>1882527

> получать последний символ ни капли не o(1)


Почему? У чаров же фиксированный размер.
23 1882579
>>1882527
Строго говоря, в каноничном UTF-8 таки O(1), потому что границы чаров точно определяемы, просто там чуть сложнее индексовой операции.

>>1882545
Нет. В UTF-8 у чаров переменный размер от одного до четырёх байтов, но чары кроме аскии на хуй не нужны никому, потому что в любых языках с умлаутами или ещё какой-нибудь дрянью, одна и та же буква может быть как одним чаром, так и не одним чаром, но их надо обрабатывать как одну и ту же букву. Короче, строки кроме аскии это такая ебля, что ты охуеешь, если в эту нору полезешь.
24 1882583
>>1882579
Да, чтобы меня не захейтили за O(1), уточню, что это только последний чар в строке, N-ый чар в строке найти только за O(n), разумеется.
25 1882589
>>1882579
Лол, ну ты и выдал. То есть пол миллиарда европейцев идут нахуй, китайцы идут нахуй, арабы идут нахуй, русские идут нахуй. Все идут нахуй, кроме американцев и прочих британцев, и то при условии что они не пользуются смайликами.
26 1882664
>>1882579

> В UTF-8 у чаров переменный размер от одного до четырёх байтов


В расте чар всегда 4 байта.
27 1882910
>>1882527
Строки это не сложно когда это последовательность (список) в utf-16 (в два и четыре байта).
28 1882934
>>1882583

>дебил не понимает асимптотику

29 1882954
>>1882910
Проще пилить на слайсы, всё остальное в них так же сложно
30 1883088
Так поясните мне чем эта параша лучше с++20?
31 1883114
>>1883088
Тем что не C++
32 1883124
>>1883088
Модули завезли? А человеческие sum types?
jane-lane-daria-morgendorffer-character-animated-series-dar[...].jpg68 Кб, 728x546
33 1883260
>>1883088
Тем, что все унижения на этапе компиляции, а не на проде субботней ночью.
16032070614600.png226 Кб, 640x596
34 1883421
35 1884233
Чет я не понял, вот есть типа crate иммутабельных струтур данных - https://docs.rs/im/15.0.0/im/

И что мы там например видим: https://docs.rs/im/15.0.0/im/struct.Vector.html#method.push_front

push_front мутирует вектор, а не, как я ожидал, создает новый вектор с добавленным элементом. Другие методы вектора все тоже мутирующие. А где иммутабельность-то? Или я что-то не понимаю?
36 1884274
>>1884233
Скорей всего где-то глубоко запрятан copy-on-write.
Попробуй вывести адрес такого вектора до пуша и после
37 1884756
>>1884274
ну блин, херня какая-то, почему вообще в языке, в котором по дефолту всё иммутабельное, коллекции полностью мутабельные? где нормальные иммутабельные коллекции-то взять?
38 1884759
>>1884756
Ты сначала объясни зачем тебе иммутабельные коллекции.
39 1884804
>>1884756
Вот именно что коллекции по дефолту иммутабельные. Не веришь - попробуй мутировать vec, объявленный без mut. Система типов просто не позволит тебе получить мутабельную ссылку на внутренности контейнера через иммутабельную.
40 1884821
>>1884759
А зачем все переменные по дефолту иммутабельны? Ровно во за этим. Раз уж делается в языке упор на иммутабельность, то и добавили бы для коллекций иммутабельные операции. А так получается коллекции без mut практически бесполезные, с ними ничего толком не сделать. Это как если бы у целочисленных переменные убрать оператор + и оставить только +=. Та же самая картина была бы
41 1884822
>>1884804
ты сейчас про систему типов говоришь, а я про предоставляемые коллекциями операции, которые все мутабельные
42 1884823
>>1884821
Ты попутал с кложурой или хаскелом. Упор делает не на иммутабельность, а на контроль над тем кто может мутировать данные, а кто нет. И за отслеживанием того, кто и когда владеет объектом. И конечно же перформанс.
43 1884828
>>1884823

>


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



Ок, допустим, зачем тогда по дефолту делать все переменные иммутабельные?
44 1884837
>>1884828
Потому что есть опыт с++, где все переменные по дефолту мутабельные и когда народ догнал что большая часть данных как раз таки не должна меняться, оно превратилось в const foo(const) const. Короче, по дефолту ты получаешь минимум возможностей, но если тебе прям точно нужна мутабельность, ты можешь ее попросить.
45 1885119
Почему у раста либа такая большая ~3.5mb, что туда понапихали? даже у плюсов в два раза меньше, а там дохрена стандартов понапихано.
46 1885122
>>1885119
Человеческие итераторы, например.
47 1885124
>>1885122
у меня единственный вариант, что что-то для локалей, потому что явно не итераторами настолько раздули std
49 1885128
>>1885126
By default, Rust optimizes for execution speed rather than binary size, since for the vast majority of applications this is ideal. But for situations where a developer wants to optimize for binary size instead, Rust provides mechanisms to accomplish this.

Отклеилось.
50 1885129
>>1885126
молодец, сам понял, что принес? Как выкинуть одну и заменить другой или просто не использовать.
52 1885140
>>1885138
Еще боевую картиночку скинь. Ты сам прочитал, что там написано?
8a89n02l45n51.jpg60 Кб, 570x659
53 1885142
>>1885140
Ряяяяяяя!
54 1885154
>>1885119

>Почему у раста либа такая большая ~3.5mb, что туда понапихали? даже у плюсов в два раза меньше



Да ты охуел? У плюсов она в 50 килобайт поместится
55 1885188
>>1885119
Разве плюсы не всегда славились тем что у них в стандартной либе почти нихуя нету?

файловыую систему в 17 завезли? треды в 11?
56 1885197
>>1884822
А, понял. Нет, этого в стандартной либе нет и, скорее всего, не будет. Кмк, это связано методом управления памятью - без сборщика мусора трудно переиспользовать старые значения, а значит, хардкорная функциональщина будет тормозить за счет постоянного выделения-освобождения памяти. Крейт im и тому подобные в помощь.
57 1885211
>>1885119
Возьми cargo-bloat и посмотри, что понапихали. Я вот посмотрел и увидел, что даже без извращений с размером кода всё ок.

У хеллоуворлда (280КиБ) - https://pastebin.com/7q1f53gZ - большая часть жира из-за обработчика крашей, он тянет за собой печать бэктрейса и полный набор форматтеров текста. Сейчас в расте что-то сломали и убрать его нельзя.

Кроме того, если уж сравниваешь раст с плюсами, то не забывай, что у плюсов стандартная библиотека обычно линкуется динамически. Включишь статическую линковку - плюсы выдадут тебе 1,8МиБ отборного говна - https://pastebin.com/cYCt8rvN. Даже чистый C сейчас выдает по 700КиБ кода.

Кмк, ни то, ни другое сейчас не важно. Вот Swift for linux, который тебе из ничего сделает 30МБ бинарник - это пиздец.

Если и следует о чем-то беспокоиться, так это о скорости сборки - с ней всё плохо :(
58 1885227
>>1885154
>>1885188

> Да ты охуел? У плюсов она в 50 килобайт поместится


у плюсов 1-1,5mb в зависимости от платформы: на ведроиде ~1, на винде ~1,5
>>1885211
я же не в том ключе сравниваю. Я лишь хотел узнать, что там раздуло либу до 3,5 и нельзя ли отключать ненужные в проекте часте, а не так, что отрубать прямо все и сразу типа no_std
просто подумал, что может там модульная структура и можно не тянуть все, а только нужные модули
59 1885232
>>1885227

> можно не тянуть все, а только нужные модули


Тут смотри >>1885126

> Optimize libstd with Xargo

60 1885241
>>1885227
Ну я и пишу - не гадай, а сразу взвесь жир при помощи cargo-bloat. Ненужные части и так не должны попадать в код - они удаляются при включенном lto (обработчик крашей - редкое исключение).
image.png35 Кб, 195x161
61 1886227
Когда ты с помощью валгринда и гдб находишь причину сегфолтов в unsafe rust коде, передача указателя на значение со стэка в си код, который должен потом освободить память размером указанным в том значении, и в качестве эксперимента пробуешь поместить значение в бокс и все вроде работает, сообщаешь об этом автору, а он просит тебя сделать ревью его коммита, основанного на твоих экспериментах. Вот только я пишу на скриптоязыках, а не на этих ваших растах и си.

Man, do I look to you like I know what am I doing?
62 1886229
>>1886227
Напишу ему LGTM, именно так бы я и сделал :thumbs:.
63 1887345
>>1886229
Можешь еще написать ему LGBT
L9Wg06VuZm9UU6sS9jvrNFNWK6FL97Vlx6-FXIw7ZY.png457 Кб, 640x456
64 1894542
Нечем заняться на новогодних? Ублажи краба!
65 1896610
Аноны, такая петрушка: юзаю par_iter из rayon. В исполняемом блоке async, который ранится через smol::run(). И вот вся эта петрушка вроде и работает, но, сука, однопоточно. И CPU 100%, и смотрел в top -H - всего один поток.
Ядер 8/16, пробрасывал ему RAYON_NUM_THREADS=12, выставлял через rayon::ThreadPoolBuilder::new().num_threads(12).build_global().unwrap() - ничего не помогает.
66 1896677
>>1896610
А без async блока все норм работает?
67 1896899
>>1896677
Хз, надо тестовый крейт замутить. Вообще, работает нон параллельно, но в одном потоке - как будто rayon с какого-то перепугу решил заюзать треды от tokio.
image.png14 Кб, 882x49
68 1898121
>>1896899
>>1896610
Ёпта, и правда, дело было в асинхронности. Унёс все асинхронные функции вообще в отдельный бинарь (там из асинхронного было только обращение к сети за данными, которые, один хер, кешировались).
И теперь совсем другое дело, все ядра в работе.
Ну, это подстава, пиздос. По-хорошему надо бы разобраться, сделать тестовый сэмпл, и багулю зарепортить, а мне лень.
69 1899200
Если бытиё поражённого ржавчиной не производит естество одного из лучших современных языков программирования то почему он является милым и прошедшим валидацию
70 1899391
>>1898121
Бля, у меня, походу, очень сложный кейс. Эта самая rayon'ная многопоточность запускается в цикле, дак вот: на первой итерации все 8/16 забиты под завязку, но на последующих - вроде бы и куча потоков реально запущена (top -H их отображает), но при этом все они прибиты к одному ядру (спасибо, что не к логическому). Хоть 12 потоков, хоть 32 - одинаково.
71 1899670
Чет читал раздел про разделение проекта на файлы. Столько воды написано, что раза с 2-3 понял только, хотя там 90% можно выкинуть и всё будет элементарно.
72 1901851
Каррирование ни в какой форме в rust не завезли что-ли? Даже что-то типа плюсового std::bind нет?
73 1901877
>>1901851
Не знаю какую ты проблему пытаешься решить.
Синтаксис лямбд очень лаконичный:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2015&gist=038ab64bdf89d2fbfcb49972314cbe31
74 1902052
>>1901851
Не завезли, пиши лямбды руками.
Можно сделать на макросах
https://peppe.rs/posts/auto-currying_rust_functions/

Отчасти понятно почему каррирования как в хачкеле нет, пришлось бы Self шатать
75 1902373
>>1902052

> пришлось бы Self шатать


м?
76 1902511
>>1902373
Нет чёткой картины, но систему типов Rust придется переебашивать, и Self перестанет быть простым типом
78 1906960
Да каким образом бутстрап билды проёбываются с каждым вторым упдейтом
79 1907127
>>1901851
- Ты функциональщик! - прокричал Сергей на весь оупен-спейс-рум номер 14. Комната притихла в ожидании развязки. — Я видел, как ты вчера вечером каррировал и декаррировал прямо за рабочим компьютером! Неодобрительный ропот и возгласы удивления прокатились по комнате. Кто-то громким шепотом сказал “какой ужас, а я с ним за руку здоровался”. — Знаешь что, Сергей, — сказал Денис, вставая из-за рабочего стола, — любой нормальный мужчина, если у него всё в порядке, может позволить себе позаниматься функциональным программированием. Это естественно. Каждый хотя бы раз, да пробовал. Зачем только об этом кричать на всю комнату? Я же не кричу, что ты объектно-ориентированный! Девушки захихикали, кто-то снова громко пробормотал “ну надо же, а по нему и не скажешь”. Присутствовавший при этом Игорь Матвеевич сильнее вжался в кресло. Только бы никто не узнал про его процедурные наклонности!
80 1911885
Чем Rust лучше а чем хуже Haskell'я?
81 1912204
>>1911885
Лучше действительно бесплатными абстрациями, а не бесконечными боксами. Хуже отсутствием HKT, которых не будет ещё как минимум десять лет.
82 1912275
Наверное тупой вопрос: а почему закомментированная строка приводит к ошибке? ведь a и b это ж ссылки? Почему их нельзя в данном случае деструктурировать в шаблоне?

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=220e6d4f6d95424c9b24f8e086ab2893
image.png10 Кб, 543x123
83 1912446
>>1912275
ты глупый или что-то?
84 1912449
>>1912275
>>1912446
и вообще у тебя as_bytes() возвращает &[u8], а не &[&u8]
85 1912483
>>1912449

>и вообще у тебя as_bytes() возвращает &[u8], а не &[&u8]



тогда почему мне приходится a разименовать? иначе получаю для кода
[a, b, ..] if a == b + 1 => false,

ошибку error[E0277]: can't compare `&u8` with `u8`
86 1912487
>>1912483
&[a,b, ..] if a == b + 1
87 1912494
>>1912487
жесть, а как так-то? что это вообще? как-то контр-интуитивно. Что почитать-то про это?
88 1912614
>>1912494

> как-то контр-интуитивно


> as_bytes() возвращает &[u8]


&[3, 4, 5, ..] помоему вполне интуитивно
89 1912663
>>1880122 (OP)
А чё можно написать на ржавом?
90 1912843
Раст мёртв
91 1912984
>>1912843
поясни
92 1913911
>>1912663
всё
oat.jpeg119 Кб, 500x580
93 1914063
94 1914101
>>1912204
скорее никогда не будут, ведь они не нужны в расте
95 1914158
>>1914101

>НИНУЖНА


Ясно.
96 1914298
>>1914158
а для чего тебе hkt в расте?интересно аж стало
rust.mp43,1 Мб, mp4,
1280x720, 1:05
97 1914948
дайте ссылочку на оригинал плиз
98 1915074
>>1914948
Почему айтишники такое быдло?
99 1915397
>>1914298
Можно описать полноценные функторы.
Обходимся тем что дали - Iterator, но это ограниченное решение
мимоанон
101 1915429
Вот какого хуя у itertools::iterate предикат принимает ссылку, а не значение? https://docs.rs/itertools/0.10.0/itertools/fn.iterate.html

Из-за этого вместо того, чтобы переиспользовать значение аргумента приходится создавать новое.

т.е. вместо скажем вместо

fn predicate_good( mut s: String) -> String
{
s.push( '1' );
s
}

приходится писать че-нить типа:
fn predicate_bad( s: &String ) -> String
{
let mut ss = s.clone();
ss.push( '1' );
ss
}

Как мне избавиться от клонирования здесь?

В std::iter::Iterator такой хуйни нет и аргументы всех предикатов передаются по значению.
102 1915447
>>1915429

> В std::iter::Iterator такой хуйни нет


Что мешает этим и пользоваться?
103 1915457
>>1915447
там аналогичной функциональности нет.

В принципе у меня скорее вопрос философский архитектурный, какими соображениями создатели itertools руководствовались когда так сделали? Херня ж по-моему какая-то получилась, или я что-то упускаю?
104 1915460
>>1915457

> там аналогичной функциональности нет.


А их нельзя смешивать разве?

> To extend Iterator with methods in this crate, import the Itertools trait:


> use itertools::Itertools;

105 1915493
Я нагнал, в std тоже есть аналогичная функция:

https://doc.rust-lang.org/std/iter/fn.successors.html

И там тож аргумент предиката по ссылке - F: FnMut(&T) -> Option<T>

Почему, йопта?
106 1915738
>>1915493
Для передачи по значению есть map.
107 1917099
>>1915493
https://doc.rust-lang.org/src/core/iter/sources.rs.html#605
item возвращается как значение next().
Если бы функция принимала T, пришлось копировать значение.
108 1917129
Прочитал недавно статью на хабре от лаборанта о ржавении. Вы, наверное, видели. Несмотря на то, что лаборант профан в сфере разработки, пара фраз о расте меня заинтересовала
Поэтому хотел бы задать пару вопросов:
1. Пишете ли вы на расте энтерпрайз бд, бизнес-логика и прочая залупа?
2. В каком состоянии гуй фреймворки?
3. Какова ваша средняя скорость написания кода на расте по сравнению с той же явой/дотнетом/etc?
4. Как вам тулинг по субъективным ощущениям?

Пишу без агрессии. Насчёт лаборанта не обессудьте, но когда пчел поднимает кластер EKS для базы в 250 мб с приростом 50 мб в год, и жалуется, что 32 Гб оперативки и 24 ядра пришлось потратить – это пушка
109 1917133
>>1917129
Забей, мёртвый игрушечный язык.
111 1917204
>>1917129
1 не по работе
2 плохо
3 лучше, но изредка может вылезти какой-нибудь заёб
4 заебца

> наверное, видели


Не. Пойду почитаю.

> EKS для базы в 250 мб с приростом 50 мб в год, и жалуется, что 32 Гб оперативки и 24 ядра пришлось потратить


Звучит как ошибка в ДНК которую никаким языком не исправить.
112 1917309
>>1917129
1. По работе
2. wasm збс, кроме готовых компонентов. Сервер збс
3. Скорость может быть меньше, но зато время дебага на порядок меньше.
4. rust-analyzer жрет гигабайты памяти, lsp днище, в целом терпимо
113 1917896
>>1917129

>3. Какова ваша средняя скорость написания кода на расте по сравнению с той же явой/дотнетом/etc?


>


Недавно ради интереса переписал один скрипт на Питоне, где много операций типа "достать строку из xml и преобразовать по шаблону". За исключением того, что изначальный скрипт написан психопатом, получилось довольно прикольно. И заработало с первого раза.
114 1918376
>>1917129
1. Писал блокчейн. Считается?
2. Есть биндинги к win api, gtk и другой залупе, свои фреймворки в зачаточном состоянии
3. От задачи и выбора инструментов зависит, так-то Rust абстракции выразительнее, но думать надо больше.
4. Компилятор хороший-удобный, всё остальное не очень
115 1922358
>>1918376
А к кути биндинги тоже кривые?
116 1922717
>>1922358
Моё мнение что всё это в принципе плохо ложится, неудобно писать на Rust GUI, по крайней мере с теми абстракциями что дали.
Но люди что-то пишут, что-то работает.
117 1923174
Котаны, подскажите ответ на нубский вопрос. Допустим есть такая конструкция
`let tcp = TcpStream::connect(&addr).unwrap();`
каким образом мне обработать ошибку резолва домена? Я в расте ни бум-бум.
118 1923233
>>1923174
С этим вроде разобрался, только непонятно где посмотреть тип ошибки если, например, хост недоступен. Подскажите, аноны!
120 1923523
>>1923258
Нихрена непонятно. Это не компилится

let tcp = TcpStream::connect(&addr);
if Ok(tcp) {
} else {
return;
};
121 1923537
>>1923523
Ага, вроде понял. Пиздец, как в расте всё запутано.
1541596852068.jpg27 Кб, 480x360
122 1923780
123 1923914
>>1923537
А потом ты узнаешь про map, map_err, and_then... и охуеешь.
124 1924056
>>1923914
Падажжи с этим, расскажите лучше про глобальные переменные. Как их, блять, объявить?
125 1924060
>>1924056
static
126 1924063
В расте есть либы по типу этой https://github.com/gammazero/workerpool ?
127 1924072
Заодно подскажите как вырезать дебаг, RUSTFLAGS='-C link-arg=-s' cargo build --release один хер хранит всякое говно в бинарнике, sstrip тоже не помог.

/home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/block-buffer-0.7.3/src/lib.rsfailed to write whole buffer/home/user/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/io/mod.rsformatter errorfailed to fill whole buffer/home/user/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/io/impls.rsadvancing IoSlice beyond its length/home/user/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/unix/io.rscalled `Result::unwrap()` on an `Err` value/home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/yasna-0.3.2/src/writer/mod.rs/home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/rdp-rs-0.1.0/src/nla/asn1.rsnegoTokenInvalid Cast/home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/rdp-rs-0.1.0/src/core/gcc.rs
128 1924074
>>1924072
panic abort
129 1924077
>>1924074
Ты нормально писать можешь?
131 1924092
>>1924083
RUSTFLAGS='-C link-arg=-s -C panic=abort' cargo build --release и мусор остался.
132 1924095
>>1924092
Так же добавил в ~/.cargo/config

[profile.release]
panic = "abort"
133 1924126
>>1924092

> мусор


?
134 1924127
136 1924199
>>1924185
lazy_static
137 1924220
>>1924199
Не отвечай на мои комменты, ты долбоёб.
138 1924223
>>1924220

> комменты


Туда ли ты зашел?
139 1924334
>>1924223
А скажи что-нибудь на двачерском.
140 1924337
Что за уебанский недоязык, где создание глобальной переменной нихуя не гуглится? А, да это же раст, язычек без задач для безработных двачеров.
141 1924356
142 1924363
>>1924337
если ты опущ, неспособный понять принципы языка, это не значит, что язык говно
для начала, нахуя тебе глобальная переменная? в расте для этого юзается static с lazy_static / thread_local, шобэ было потокобезопасно
хочешь mut static - только через ансейф, ибо компиль не ебёт, будешь ли ты в будущем изменять глобальное состояние (что уже само по себе почти антипаттерн)
143 1924409
>>1924363

>понять принципы языка


Как это уебанство понять? https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=d4b3018117ac7c7a09314e53bb6ebb71
144 1924420
>>1924409

> error[E0133]: use of mutable static is unsafe and requires unsafe function or block


Тебе прямым текстом говорят что ты делаешь хуйню и что нужно сделать если ты сегодня первый день.
146 1924473
>>1924422
Я уже распарсил что нужно unsafe юзать. Создатели раста дебилы? Как без инкрементных операций циклы выполнять? Ебобо какое-то.
147 1924514
>>1924473
Какие циклы? Нахуя тебе для цикла глобальный мутабельный стейт?
148 1926876
Почему бы всякий энтерпрайз не писать на расте?
149 1926913
>>1926876
1. Нет библиотек, хуевая инфраструктура
2. Дебильный менталитет у комьюнити, вечно все поломано и нихуя не работает
3. Хуевый компилятор, сборка проекта полдня
4. Слишком мало бабла инвестировано
5. Мало разработчиков
6. ???
7. Джава ЕЕ бой!
150 1926920
>>1926876
Чтобы что? Для энтерпрайза нужен максимально простой язык, которому можно обучить любого дебила, энтерпрайзу в целом похуй на перформанс и главное — сроки. Зачем там руст?
151 1927293
>>1926920

>Зачем там руст?


За такие вопросы у меня в стартапе убивают нахуй!
152 1927435
>>1927293
А как стартап относится к энтерпрайзу и к расту? Там же на жсе высирают всё как можно быстрее, лол.
153 1928127
>>1927435
Ну вдруг стартап в космической отрасли зарубежом для которой тебе придется иметь 100500 лет опыта, гражданство США/Европкосоюза, знание С++/АСМа/Верилога для галочки и прочие прелести за зарплату реакт-фронтэндера
154 1928271
>>1928127
там всякая дичь типа ады юзается
155 1928918
>>1928271
Зумерок после гуманных языков испугался ады, кек.
156 1929605
Грейдон хор пишет на плюсах и особо не интересуется растом, лол
157 1929968
>>1924422
Как мне такую же херню провернуть со структурой? Чтобы она была глобальная и мутабельная.
158 1929978
>>1929968
Сделать структуру по типу

struct Qwe(usize);

и заменить все "x = 42;" на "x = Qwe(42);".

Но вообще, ты ёбобо, которое потом будет орать что раст хуйня, потому что баги какие-то неуловимые, ведь ты не хотел падать на подстеленную разработчиками соломку сейф раста, а полез в ансейф раст, не понимая всех тонкостей UB и того, почему абстрактная машина раста и реальные процессорные команды — это разные вещи.
159 1930024
>>1929978
Я передумал. Допустим есть
struct SomeStruct {
A: String,
B: String,
}

В main где-то там я делаю
let mut Ss:SomeStruct;
if 1 < 2 {
Ss.A = 123;
}
if 4 > 3 {
Ss.B = 456;
}
Вот тут ошибка компиляции почему-то.
160 1930027
>>1930024
Блять, там не String, а i32. Но проблема в том, что не даёт изменить значения.
161 1930029
assign to part of possibly-uninitialized variable: `config`
162 1930035
Нашел такое пояснение https://stackoverflow.com/a/55660504
Ебануться, блядь.
163 1930278
>>1930035
Ты пробовал читать и вникать в ошибки компилятора, вместо того чтобы сразу кричать рррряяяяя?
164 1930388
>>1930278
Есть бы хоть один писал нормально, а не так, как принято в раст-комьюнити. Нахер, короче, вас всех с вашим говном без задач.
165 1930552
>>1930388
Ты растбука не читал, ошибки не читаешь, и думаешь в узких рамках своего предыдущего бэкграунда. Дело не в комьюнити, а в тебе. Just sayin
166 1930555
>>1930388
Мог бы еще прийти в хаскель тред и сказать:
- Так, ебана, как у вас тут сделать глобальную мутабельную переменную? Какие монады-шмонады? Как мне разыменовать указатель ебана.
167 1932036
>>1930388
Проиграл с этого малолетнего дебила. Мы вам даже не перезвоним.

мимо
44887257.png31 Кб, 200x200
168 1933822
Embark Studios - компания мечты.
Большая часть сотрудников транс и лгбт-персоны. Пишут графику игры на Rust. Пишут графику и шейдеры на Rust. Поддерживают BLM.
Как бы я хотел бы попасть к ним. Почему я не живу в Швеции?

https://github.com/EmbarkStudios
169 1933939
>>1933822
да, рил крута
171 1934816
>>1934784
Это плохо или хорошо?
172 1934854
>>1934816
У разработчиков будут деньги на лапшу быстрого приготовления и HRT.
173 1934864
>>1934816
Заёбы мозиллы меньше влиять будут.
174 1935015
>>1934784
хорошо, что соблюден гендерный баланс, но как блм активист я не понимаю почему нет представителей черной расы в директорах.
175 1936911
Всем шалом в этом чате. Я к вам пришёл из Go, меня интересуют веб-фреймворки на расте по типу gin-gonic/beego/iris. Есть что-то похожее на растишке? Мне нужны удобства в рендеринге шаблонов, удобная работа с формами, авторизацией. Что посоветуете, уважаемые?
176 1936942
>>1936911
https://rocket.rs/
https://actix.rs/
Выбирай на свой вкус. У рокета еще есть асинк-ветка, которую пока не релизнули. Я пользуюсь с осени, полет нормальный.
178 1936990
>>1936942

>https://actix.rs/


Выглядит неплохо, спасибо.
179 1936991
>>1936990
Если хочешь батарейки, смотри в сторону рокета все таки.
180 1937339
>>1936991
Наскольно рокет проще для вкатывания? Вижу у него работа с шаблонами лучше, tera юзается, очень похоже на шаблоны в го.
rust.png46 Кб, 794x772
181 1937348
>>1880122 (OP)
https://habr.com/ru/post/541772/

Даже на хабре уже начинают прозревать.
182 1937423
>>1937339
Он супер простой. Если хочется посмотреть как делать плюс минус реалистичные вещи: https://github.com/TatriX/realworld-rust-rocket
183 1937427
>>1937348
Я сидел с ней в баре в Москве на расто-конфе пару лет назад. Ничего особенного в ней нет, просто человек.
184 1937609
>>1937427

>ней


>просто человек


Are you pidor?
oMJHrHFC400x400.jpg29 Кб, 400x400
185 1937715
>>1937427
Согласен, обычный няшный трапик.
186 1937772
>>1937609
осуждаю!
187 1938182
>>1937715
Была бы у меня такой няшный трапик, быть может я бы и на раст начал писать...
188 1938204
>>1938182
Попробуй наоборот.
189 1938572
Приветствую, ржавоебов.
Объясните в чем смысл языка. Искал себе какой-то язык для души, чтобы по кайфу что-то писать. Попробовал хаскель, очень круто, но как-то сильно заебисто, много сомнительных моментов, таких как отсутствие скобок, везде тайп классы, инкапсуляций и методов нет.

Поэтому решил посмотреть раст. С чего можно начать изучение? Может есть книги и тд. Я начал с онлайн книги на офф сайте, но она очень нудная, прям для очень начинающих.
887711.jpg30 Кб, 400x400
190 1938913
>>1938572
https://rust-lang.ru/
В колонке "изучить Rust: " всё твоё. Не знаю что тебе ещё нужно.
Можешь ещё навернуть тег на хабре: https://habr.com/ru/hub/rust/

>Объясните в чем смысл языка


Смысл языка в инклюзивности и нулевых абстракциях без утечек памяти в сейф моде. Язык для системников ака байтоёбов. Всех других от него рано или поздно начинает тошнить.
191 1943349
>>1938572
В trpl читай только главы про лайфтаймы\трейты\обработку ошибок и т.п., вместо вводных глав и прочей хуйни пробегись по rust by example + rustlings. Потом читай embedded book, ну или что ты там хочешь делать. Местных не слушай, тут одни хуесосы сидят (как всегда).
192 1943363
>>1881876
Попробуй другие поисковики. Гугл какой-то некачественный и глупый стал.
193 1943525
>>1943363

>Гугл какой-то некачественный и глупый стал.


Только он контекст понимает, для остальных нужно уточнять всегда

>>1943349
Всё это есть буквально постом выше, но вам видимо нужно на блюдце принести. Если так, то раст не для вас.
holmer & khyperia.png941 Кб, 598x598
194 1943543
>>1943349

>тут одни хуесосы


Как будто что-то плохое
195 1943921
В раст самое классное сообщество)
196 1943961
>>1943543 Кто на пике?
5576448.jpg6 Кб, 200x200
197 1944001
>>1943961
Создатель rust-gpu и его тян
198 1944008
>>1944001
Я не понимаю, что вам так бомбит.
Имеют деньги и балуются. Это как раньше были какие-то мини-юбки или татухи.
8.gif3,2 Мб, 372x372
199 1944015
>>1944008
У кого бомбит то?
200 1944021
>>1944015
У васянов на конкретных сайтиках. Я помню, какой ад был на качкобабах, а теперь если нет качкожопы то пиздец трагедия.
holmes.png1,1 Мб, 1051x684
201 1944026
>>1944008

>Это как раньше были какие-то мини-юбки или татухи.


>>1944021

>качкобабах


>качкожопы


Причём тут качкобабы и качкожопы? Это не мода и не сиеминутное решение, которое можно откатить. Это выбор человека и их нужно в этом поддерживать. Это если про лирику.

А если по существу: khyperia охуенная, rust-gpu охуенный (это реально прорыв и возможно будущее геймдева), holmes охуенная (посмотрик какие полезные ролики она мутит на ютубе).
Поэтому все трансфобы и прочие дегенераты идут лесом.
202 1944031
>>1944026
На женщине не должно быть мужской одежды, и мужчина не должен одеваться в женское платье, ибо мерзок пред Господом, Богом твоим, всякий, делающий сие.

Второзаконие 22:5
203 1944032

>и их нужно в этом поддерживать


Нет, не нужно. За поддержкой можешь в твиттер съебать, дегенеративный жополаз.
204 1944057
>>1944031
Ты так цитируешь, как будто это оригинал, а не четырежды проёбанный перевод, который был адаптирован под нужды небритых варваров.
205 1944087
>>1944031

> БОХНАКАЖЭТ


Сук, чёт ржу. Неспроста говорят что мы переживаем технологическое средневековье.
206 1944144
>>1944057
Перевод хороший. Можно спорить о не совсем точно переданной стилистике, но суть и смысл библейского текста переданы верно. Текст на древнееврейском можешь посмотреть здесь:
https://www.mechon-mamre.org/p/pt/pt0522.htm

>>1944087
Если у тебя в силу того, что ты окружил себя технологиями, отсутствуют убеждения и принципы, либо ты их имплицитно воспринял от своего окружения в качестве "актуальных", то это не значит, что другие такие же.
207 1944169
Не бывает 100% хороших (кроме Христа) или 100% плохих людей. Люди разные. Программисты-транссексуалы делают много хороших вещей. Они придумывают классные технологические решения, облегчают работу людям, двигают технический прогресс. Но их выбор в плане ориентации или гендера - это искажение человеческой природы девиациями. Ненавидеть или кэнселить этих людей - это плохо. Ненавидеть надо грех, а не людей. Любой человек прекрасен как замысел Божий, плохо лишь увлечение противоестественными разрушительными вещами. И говорить, что хорошо, а что плохо, обсуждать, спорить, это нормально.

Ладно, прекращаю офтоп.
208 1944218
>>1944144

> либо ты их имплицитно воспринял от своего окружения в качестве "актуальных"


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

>>1944169
Лучше всего забить на это хер, не оценивать, ни плохо ни хорошо. У трансгендеров почти всегда нет детей, они никогда не станут большинством, скорее будут в роли малочисленного генетического шума.

> противоестественными разрушительными вещами



Люди курят, бухают, дрочат, сосут члены, обжираются, смотрят кинцо, в том числе аморальное, играют в игоры, в том числе с жестокостью, ходят в казино, делают ставки, хулиганят, совершают тысячи разных преступлений. Но всё внимание получают мужики на гормонах в юбках. Это похоже на латентную гомосексуальность, подумай об этом.
209 1944287
>>1944218

>то у него ни принципов, ни души, ни сердца, и его нужно сжечь на костре


Где ты это увидел? Ты пытаешься возразить ценностному суждению: транссексуальность это неестественно и плохо. Какие костры? Я не испытываю ненависти к людям, говоря, что они делают что-то неправильно.

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

>У трансгендеров почти всегда нет детей


Чем больше таких людей, тем хуже для общества. Опять же, без ненависти к ним. Люди, которые создают нормальные семьи и заводят детей, обычно думают о будущем, делают разумные инвестиции, поддерживают стабильность в обществе, в котором живут. ЛГБТ-пары зачастую живут одним днем, у них редко бывают дети, стало быть, они безразличны к будущему и к среде, в которой находятся.

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

>Но всё внимание получают мужики на гормонах в юбках


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

>Это похоже на латентную гомосексуальность


Странная аргументация. BLM-активисты - латентные белые расисты, геи - латентные гомофобы, трансы - латентные трансфобы, ага.
210 1944292
Обещал не офтопить, но офтоплю. Приношу извинения.
anastasia opara.jpg17 Кб, 400x400
211 1944359
>>1944287

>Чем больше таких людей, тем хуже для общества


Этих людей мало, просто они бросаются в глаза. Где я эти фотки взял есть ещё 60+ человек, но если бы я постил их фото, то у тебя скорее всего возник вопрос - что это за ноунеймы? Но именно на трансов у тебя встал и ты начал рассказывать про будущее общества.

>Люди, которые создают нормальные семьи и заводят детей, обычно думают о будущем


Окей, сейчас наша медицина в говне. Если завтра какой-нибудь мужчина сменив пол сможет рожать детей и не будет испытывать проблем с здоровьем - это изменит твою позицию? И почему? Ещё 50 лет назад трансы могли разве что переодется в женщину, аля Верка Сердючка. Сегодня они могут полностью преобразить свою внешность до неузнаваемости. Завтра они будут рожать детей как и обычные женщины.

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


Я согласен с этим, но проблема в том, что именно капиталистическое общество рушит современный институт семьи и позволяет существовать трансам. Капитализм и любые религиозные принципы - несовместимы.

>чтобы им уделялось сколь либо большое внимание


Ой. А как это сочетается с 4 абзацами текста от тебя про неестественность трансгендеров?
212 1944383
>>1944359

>Ой. А как это сочетается с 4 абзацами текста от тебя про неестественность трансгендеров?


В треде зашел разговор эту тему, я запостил цитату, отражающую мое мнение, мне сказали, что это мнение средневековое и "так нельзя", в ответ я подробно изложил свою позицию. Все. Больше нечего добавить.
213 1944403
>>1944383
Слился?
214 1944467
>>1944403
Не понимаю, зачем спорить дальше. Я с тобой не согласен, но тред же о другом.
215 1944472
>>1944467
Раст это больше чем язык программирования. Это революция, это протест. Тут не бывает оффтопа. В прошлых тредах мы обсуждали политику, железо, другие языки, игры, геймдев...
216 1944478
>>1944472

>Это революция, это протест


Ну хорошо хоть не гендер.
217 1944633
>>1944359

> Ещё 50 лет назад трансы могли разве что переодется в женщину, аля Верка Сердючка. Сегодня они могут полностью преобразить свою внешность до неузнаваемости. Завтра они будут рожать детей как и обычные женщины.


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

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

не думал что буду писать про трапов в треде про язык программирования
218 1944680
>>1944633
Применятся гормональная терапия (и соответственно массово тестироваться начала только в 80-90х годах). В том числе это совпало с изменением юридического статуса трансов и лгбт. Чтоб сегодня в подростком возрасте ты мог стать няшей - мужики по всему миру из под полы юзали гормоны почти 100 лет.

Про пластику вообще не стоит и говорить. До нулевых даже силиконовые сиськи выглядили как надутые шары (если ретро порнуху смотрел то понимаешь). Сейчас ты на глаз едва-едва сможешь определить. Больше опыта накопилось в ринопластике, в лицевой хирургии, куча косметических операций. Та же вагинопластика в более-менее адекватном виде появилась только в конце 90х/начале 00х, до этого были по сути подопытные кролики.

50 лет назад гомосексуализм считался психическим расстройством по МКБ, на секундочку. Про трансов молчу. Тебе не гормоны, тебе галоперидол могли всерьёз выписать.
219 1944710
>>1944633

>если тебе в 30 стрельнет в голову, что ты женщина, то станешь мужиком в юбке.


Natalie Mars сделала переход в 30

мимо
220 1944802
>>1944710
>>1944680
>>1944633
>>1944478
>>1944359
>>1944287
>>1944218
>>1944169

Модер, блядь, бери вилку и чисти это говно.

И это инженеры? Говно какое-то, пидоры, блядь. Родина им дала доску — обсуждай! Обсуждай Rust, блядь! Не хочу, хочу жрать говно и на членодевок дрочить! Что такое? Это /pr/?! Это тематика?! Суки… Мудачьё — программисты. В тред зашли, говно жрут — пидоры, блядь, ёбаные…
221 1944989
>>1944287

> А у людей потом здоровье рушится из-за решения "сменить пол" и сидеть на препаратах.



Не переживай за чужое здоровье. Они знают на что идут, я спрашивал.

> ЛГБТ-пары зачастую живут одним днем, они безразличны к будущему и к среде



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

> С экономической точки зрения



Говорят, геи вполне платёжеспособны, не просто на уровне, а даже выше среднего.

> BLM-активисты - латентные белые расисты, геи - латентные гомофобы, трансы - латентные трансфобы, ага.



Это кстати не так далеко от истины как кажется.

> Не вижу, чтобы им уделялось сколь либо большое внимание.



Я конкретно про тебя. Зачем ты пришёл ITT читать проповеди с выдержками из библии? У нас тут инклюзивность и членодевки с неграми и девственниками в контрибьюторах, и мы не суд нравственности.

>>1944802

Ты думаешь просто так везде вводится code of conduct? Инженеры конечно прекрасны в инженерии, но житейские проблемы приходится объяснять на пальцах.
222 1945071
>>1944989

>и мы не суд нравственности


Тогда не указывай людям, за кого им можно переживать, а за кого нет, и кому что высказывать. Иначе ты сам себе противоречишь.
223 1945128
>>1945071
Есть жизнь внутри комьюнити, есть жизнь вне комьюнити. Внутри мы дружные зайки и все друг друга любим и уважаем. А вовне можешь хоть человечину жрать на завтрак. Главное правило — не суди за жизнь вне комьюнити. То есть, христианство, семейные ценности — да пожалуйста, неплохой выбор, и в целом это не моё дело как ты живёшь у себя дома.
224 1945179
>>1945128

>Есть жизнь внутри комьюнити, есть жизнь вне комьюнити


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

Во-вторых, даже если рассматривать ситуацию в рамках этого условного разделения, люди заявляют о своих сексуальных предпочтениях внутри самого комьюнити, давая окружающим знать о своей личной жизни и рассчитывая на поддержку. А люди вправе не поддержать их и высказать свое мнение об этом. В ответ люди вроде тебя вправе высказать свое мнение.
225 1945216
>>1944287

>Чем больше таких людей, тем хуже для общества.


Да, но чем больше люди размножаются, тем хуже для текущего состояния человечества. Мы до сих пор не озеленили Марс, а количество мешков с мясом, которое может поддерживать Земля скоро пересечёт критическую отметку. Выбирая между группой сознательно — или не очень сознательно — отказавшихся от размножения людей, децимацией всего человечества, или вымиранием человечества, лично я голосую за первое.
226 1945301
>>1945216
Проблема в растущих запросах людей на потребление. Даже если бы население Земли составляло всего один миллиард, то с ростом потребления они бы все равно смогли эпично растратить все ресурсы планеты.

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

Кстати у нас, христиан, есть представление о cultural mandate, о разумном использовании мира, который дан Богом, поэтому нас эта тема тоже беспокоит. Но отказ от воспроизводства не вариант, потому что Бог заповедал верующим плодиться и размножаться, стало быть, пусть будет больше рационально мыслящих религиозных людей которые помогут (в идеале должны помочь) остальным.
saintignucius.jpg31 Кб, 321x445
227 1945310
228 1945396
>>1944026

>Это выбор человека и их нужно в этом поддерживать.


Зачем? Это их выбор, они знали на что идут
229 1945400
>>1945301
>>1945216
О чем вы вообще? Мы пищи производим в три раза больше, чем нужно. Проблема не в потреблении, проблема в перепроизводстве и неэффективном распоряжении ресурсами.

>>1944287
Вебер жил в протестантском обществе емнип, а у протестантов своя этика, отличная даже от католической.

Что же касается этики - лол, с такой точки зрения лучше всего обществу подходят марксизм или национализм, они в принципе построены вокруг социально-эволюционно выгодного коллективизма. Но если все мерить заботой о будущем и общем, то лучше вообще вводить человейник и бургундскую систему сразу.
230 1945447
>>1945216

>которое может поддерживать Земля скоро пересечёт критическую отметку


Так говорят уже лет 100 с чем-то. За это время население увеличилось в несколько раз.
231 1945466
>>1945400

>Вебер жил в протестантском обществе емнип, а у протестантов своя этика, отличная даже от католической.


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

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


Это путь к тоталитаризму. Христианские ценности подразумевают индивидуализм и добровольность. Каждый отвечает за себя и трудится на совесть, понимая, что ему надо не трудодни отработать, а выполнить свою работу качественно и без халтуры. Мотивация тут одна - у тебя есть жизненное призвание, данное тебе Богом, и Бог видит твой труд.
sage 232 1945547
You will never be a real woman. You have no womb, you have no ovaries, you have no eggs. You are a homosexual man twisted by drugs and surgery into a crude mockery of nature’s perfection.
All the “validation” you get is two-faced and half-hearted. Behind your back people mock you. Your parents are disgusted and ashamed of you, your “friends” laugh at your ghoulish appearance behind closed doors.
Men are utterly repulsed by you. Thousands of years of evolution have allowed men to sniff out frauds with incredible efficiency. Even trannies who “pass” look uncanny and unnatural to a man. Your bone structure is a dead giveaway. And even if you manage to get a drunk guy home with you, he’ll turn tail and bolt the second he gets a whiff of your diseased, infected axe wound.
You will never be happy. You wrench out a fake smile every single morning and tell yourself it’s going to be ok, but deep inside you feel the depression creeping up like a weed, ready to crush you under the unbearable weight.
Eventually it’ll be too much to bear - you’ll buy a rope, tie a noose, put it around your neck, and plunge into the cold abyss. Your parents will find you, heartbroken but relieved that they no longer have to live with the unbearable shame and disappointment. They’ll bury you with a headstone marked with your birth name, and every passerby for the rest of eternity will know a man is buried there. Your body will decay and go back to the dust, and all that will remain of your legacy is a skeleton that is unmistakably male.
This is your fate. This is what you chose. There is no turning back.
233 1945599
>>1945466

>Такое экономическое поведение позволило людям накапливать финансовый капитал, а потом инвестировать его во благо общества.


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

>Христианские ценности подразумевают индивидуализм


Христианские ценности что только не подразумевают, и как их только на глобус не натягивали. Какбэ сравни свое понимание, христианских социалистов, крестоносцев какую-нибудь обскурную ветвь вроде мессалианцев (которые считали, что Бог познается через чувственные удовольствия, а труд - грех и им должны заниматься рабы) и Милонова какого-нибудь. Все эти граждане искренне считают, что действуют в духе тру-христианства.
234 1945618
>>1945599

>Упускается тот факт, что без колониализма всего бы этого не было


Согласен, это повлияло на развитие капитализма. Но у тех же старообрядцев и без колониализма взлетело. Даже в условиях гонений.

>Все эти граждане искренне считают, что действуют в духе тру-христианства


Пусть считают. В Писании сказано: "по плодам их узнаете их". Не вижу каких-то годных результатов у христианских социалистов. Насильственный отъем частной собственности и присвоение чужого считаю преступлением, так что считаю, что последовательный социализм вряд ли может быть христианским.

Я за минимальное государство по Нозику и за создание частных благотворительных фондов, которые будут помогать нуждающимся и обустраивать общество по мере возможности. Если какие-то общины христиан хотят иметь общее имущество, то без проблем, пускай создают такие общины, но на добровольной основе. Как гуттериты, например.
235 1945632
>>1945618

>Но у тех же старообрядцев и без колониализма взлетело.


Настолько взлетело, что капитализма в РИ так и не построили по факту, лишь в последние лет 50 какие-то зачатки появились.

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

>Насильственный отъем частной собственности и присвоение чужого


А социалист (даже не христианский) скажет тебе, что это капиталист присваивает себе чужой труд, а рабочий трудится на него, потому что ему нужен жрат. То есть с точки зрения соци как раз капиталист бака и бяка. Не все так однозначно.

Да и Спаситель вполне себе устроил погром в храме, нанеся существенный экономический ущерб честным торгашам внутри.

>Я за минимальное государство по Нозику


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

Оговорюсь, что не соци и не рыночник, разочаровался в идеологиях в принципе. То же самое и с религией - был православным, теперь... нечто иное.
236 1945633
>>1945618

>по Нозику


Oy vey
1. Дороги тоже будут минимальные?
2. Как работают суды при Нозике?
237 1945636
>>1945632

>чем везти в Африку и раздавать там.


Чтобы они плодились ещё быстрее и приходилось везти им ещё больше еды...
238 1945639
>>1945636
Не в этом дело. Они просто не заплатят столько, чтобы это было разумно. Выкинуть пищу дешевле, чем продать в Африке.
239 1945714
>>1945639
Всё так, а что?
240 1945720
>>1945714
А ничего. Тут хрестьянин сверху распинался, что свобода, Боженька и рынок все организуют - ан нет, у нас жуткий перерасход ресурсов и их нехватка при избытке (!!!). Иногда мне всерьез начинает казаться, что концлагерь - лучший способ организации человечества.
241 1945731
>>1945720
Перерасход и избыток человеческого ресурса, а еды столько сколько надо. Да и есть ли нехватка, если население черной Африки всё ещё растёт
242 1945733
>>1945731
Ну, по статистике ООН у нас миллиард человек голодает, так-то. Опять же, не вся Африка голодает, и не все африканцы размножают как кролики; в Индии примерно такая же шняга.

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

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


В мурике просто сумасшедших изолировать не принято, лол.
244 1945795
>>1945788
А ты подумай - что в этом такого, если не отталкиваться от нашего менталитета? Еда - вполне свежая, бесплатная, на любой вкус, в упаковке. Ее просто не успеют продать, а потому обычно держат на заднем дворе пару дней как раз для таких ребят, хотя с ними пытаются бороться - если ты ешь нахаляву, ты не создаешь спроса.
245 1945858
>>1945795
В США в каждом супермаркете стоит пресс для уничтожения просроченных продуктов. Просто потому что если кто-то траванется едой из супермаркета, даже выброшенной, то есть риск судебных исков.

Поэтому чтобы найти просрочку в США я даже не знаю как надо извернуться и в какие помойки залезть.
246 1945864
>>1945858
Ты так говоришь, как будто в каждом штате законы одинаковые.
247 1945887
>>1945858
Так они ж не покупают, а побирают. В том-то и фишка.
sage 248 1946442
>>1944031

>Второзаконие 22:5


Нагорную проповедь прочитал, ИИссус сказал, что то кто заповеди соблюдает в рай не попадет. Моисеевы законы отменяются.
249 1946476
>>1946442

> в рай


Там одни душнилы.
250 1947147
>>1944802
Rust сообщество это протест, пошел нахуй трансофоб
251 1947425
Пиздос. Индексы в массивах только usize, нельзя складывать usize и isize, но при этом можно вычитать usize из usize. В итоге делаю странное, чтобы всё было usize:

index = index + index_add - index_sub
16129789564880.jpg102 Кб, 300x269
252 1947509
Орнул с треда. Теперь шутки ради буду хуесосить всех, кто про раст ирл топят.
253 1947523
>>1947509
Тред не читал. Раст хуйня? Почему?
254 1947560
>>1947523
Раст норм, не обращай внимания на тролля. Просто в треде завели ненужные споры про личную жизнь контрибьюторов, а потом вообще ушли в обсуждение религии и политики.
255 1947575
>>1947560
Но если контрибьюторы пидоры/ЛГБТ шавки, то выходит что Раст зашкваренный язык от выебанных петухов в жопу, не? Ровным пацанам его юзать нельзя получается.
256 1947577
>>1947575
Расскажи, чем сам пользуешься, вдруг там ЛГБТ или ЛГБТ-френдли челики затесались среди контрибьюторов. Вдруг ты зашкварен уже.
257 1947858
>>1947425
Можно, если превратить usize в isize, а потом обратно. Но то, что индексы только usize — это охуенно на самом деле, решает целую кучу проблем.
index = (index as isize + index_add + index_sub) as usize;
258 1947957
>>1947425
Не уверен насчет конкретно твоего случая, но оно бывает полезно. Алсо есть чекед/врап/оверфлов адд/саб
hysterical-laughter.jpg33 Кб, 534x534
259 1948259
C++ СЛИШКОМ СЛОЖНЫЙ, НАМ НУЖЕН ЯЗЫК ПОПРОЩЕ
@
ГАЙД НА ПОЛТОРА ЧАСА КАК СПЛИТИТЬ СТРОКИ
https://www.youtube.com/watch?v=rAl-9HwD858
260 1948295
>>1948259
Раст не простой, раст правильный. Если надо просто — голанг.
261 1948358
>>1948259

>ГАЙД НА ПОЛТОРА ЧАСА КАК СПЛИТИТЬ СТРОКИ


Это не гайд - это по сути стрим, где челик тупо включил камеру и начал вещать.
Вот тебе лекция на полтора часа по плюсам: https://www.youtube.com/watch?v=JGu-4McXVok

>C++ СЛИШКОМ СЛОЖНЫЙ, НАМ НУЖЕН ЯЗЫК ПОПРОЩЕ


Сам выдумал хуйню и сам её "опровергаешь"?
262 1948378
>>1948358

>Это не гайд - это по сути стрим, где челик тупо включил камеру и начал вещать.


Окей гайд не может быть в виде стрима.

>Вот тебе лекция на полтора часа по плюсам:


>класс String


Во первых это не лекция, а по сути стрим, челик просто включил камеру и начал вещать, во вторых это про String, а не &str.
263 1948752
Туплю. Есть некая сторона куба, допустим 10, она в константе. Мне нужно в другой константе иметь максимальное расстояние которое можно пролететь внутри куба, что есть стандартное евклидово расстояние от угла до угла, sqrt(3xx) ~ 17.32. Но я у мамы перфекционист, и хочу считать всё абсолютно без float и без сторонних пакетов, и меня устроит любое целое число больше 18, и допустим меньше 40, посчитанное некоторым приближением из 10. Как быть?
Rubberduckassistingwithdebugging.jpg15 Кб, 220x220
264 1948753
>>1948752
А, всем спасибо, я допёр. Можно всего лишь 10 умножить на корень из 3.
265 1951119
А правда, что растоёбы - самое приветливое к червям-ньюфагам комьюнити?
Если буду дебильными вопросами тред закидывать - обосрете?
266 1951153
>>1951119
Нет, у раста самое приветливое коммьюнити из языков программирования.
Да, обосрём, потому что ты не прочитал растбук. А если прочитал, то у тебя не будет совсем дебильных вопросов.
267 1951166
>>1951153

>А если прочитал, то у тебя не будет совсем дебильных вопросов.


Здесь ты не прав, киддо. Я ведь не уточнял, что дебильные вопросы будут касаться раста а не ООП
268 1951232
>>1951166
Кря
269 1954097
Вопрос от потенциального вкатуна в раст, слегка осматриваюсь, пытаюсь понять всякие синтаксические плюшки и все такое и первое, что прямо бросается в глаза:
Возможность опускать return
Last statement еще куда не шло, но в середине функции, с несколькими возможными return (без самого return)?
Это выглядит очень неочевидно и проглядывает возможность допустить ту же ошибку, которую люди допускали в плюсах, написав вот так: while (hui = pizda) (очевидно поставив = вместо ==)

Немного погуглив нашел вот это: https://stackoverflow.com/questions/27961879/why-is-using-return-as-the-last-statement-in-a-function-considered-bad-style

И что-то никаких конструктивных причин не вижу, кроме меньше нужно печатать

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

И как прерывается ничего не возвращающая функция?
Через return?
270 1954106
>>1954097

> Возможность опускать return


В отличии от паскаля с "процедурами" и "функциями", в расте все функции всегда возвращают какое-то значение. Часто это значение () типа (). За счет синтаксического сахара ты можешь его не указывать явно:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=8686c254e8498adbfd33ef63ab40f3f1
foo и бар отличаются только наличием сахара.
Точка с запятой по сути позволяет выкинуть нахуй текущее значение и превратить его в ()
271 1954196
>>1947575
Представь себе, ЛГБТ-пидоры дышат тем же воздухом, что и ты, так что ты автоматически зашкварен, т.к. делаешь то же самое, что и эти мерзкие пидорасы.
Чтобы остаться ровным пацаном, тебе прямо сейчас нужно задержать дыхание и перестать дышать до тех пор, пока ты не задохнешься и не обмякнешь под себя.
272 1954206
Есть задача, написать на расте что-то типа конфигурируемого движка workflow.
Есть ряд обработчиков, у обработчиков есть данные на входе и выходе. Задача - описывать порядок выполнения этих обработчиков в текстовом файле, чтобы можно было выполнять разные наборы в разном порядке без перекомпиляции программы.
Пока не понимаю, можно ли это вообще сделать на расте, и если да - то как.
Может, у кого-то будут советы, в какую сторону копать.

Допустим, будет такой трейт:

trait Step<I, O> {
fn process(input: I) -> Result<O, Error>;
}

И пара реализаций:
struct Handler1;

impl Step<u32, String> for Handler1 {
fn process(input: u32) -> Result<String, Error> { ... }
}

struct Handler2;

impl Step<String, bool> for Handler1 {
fn process(input: String) -> Result<String, Error> { ... }
}

И надо описать в текстовом файле порядок вызовов, например будет такой yaml:

steps:
- type: Handler1
input: ScalarValue(100)
- type: Handler2
input: PreviousStepResult

Мне надо десериализовать это в нужные обработчики, запустить в нужном порядке и подать на вход нужные данные, желательно проверив перед этим совместимость типов, и если тип не совпадает, то выводить ошибку.
И вот тут у меня ступор, в расте ведь нет рефлексии, можно ли как-то реализовать такое, или лучше смотреть в сторону более динамических языков?
272 1954206
Есть задача, написать на расте что-то типа конфигурируемого движка workflow.
Есть ряд обработчиков, у обработчиков есть данные на входе и выходе. Задача - описывать порядок выполнения этих обработчиков в текстовом файле, чтобы можно было выполнять разные наборы в разном порядке без перекомпиляции программы.
Пока не понимаю, можно ли это вообще сделать на расте, и если да - то как.
Может, у кого-то будут советы, в какую сторону копать.

Допустим, будет такой трейт:

trait Step<I, O> {
fn process(input: I) -> Result<O, Error>;
}

И пара реализаций:
struct Handler1;

impl Step<u32, String> for Handler1 {
fn process(input: u32) -> Result<String, Error> { ... }
}

struct Handler2;

impl Step<String, bool> for Handler1 {
fn process(input: String) -> Result<String, Error> { ... }
}

И надо описать в текстовом файле порядок вызовов, например будет такой yaml:

steps:
- type: Handler1
input: ScalarValue(100)
- type: Handler2
input: PreviousStepResult

Мне надо десериализовать это в нужные обработчики, запустить в нужном порядке и подать на вход нужные данные, желательно проверив перед этим совместимость типов, и если тип не совпадает, то выводить ошибку.
И вот тут у меня ступор, в расте ведь нет рефлексии, можно ли как-то реализовать такое, или лучше смотреть в сторону более динамических языков?
273 1954255
Есть примеры серьёзного софта на расте? Желательно не либы, а b2b или чисто пользовательское.
275 1954281
>>1954097
Дело в том что в расте if, match это выражения (expressions), у которых есть результат. Даже если они многострочные. Это не statements как ты привык. То есть там не проставляется неявный ретурн, а всё так же просто возвращается результат последнего expression, даже если это ветвистый match на 300 строк.
276 1954429
>>1954097

>И как прерывается ничего не возвращающая функция?


В расте все функции что-то возвращают, просто синтаксический сахар позволяет скрывать возвращаемый init, который выглядит как (). Когда ты поймёшь, что все функции что-то возвращают, и что можно написать

let init_var: () = { let x = 1; };

ты поймёшь, почему твой вопрос не имеет смысла. Ведь если твоя функция заканчивается на let x = 1;, то поскольку это выражение возвращает (), то и функция возвращает (). Любая функция в расте прерывается либо return, либо последним выражением в теле функции, и функций, которые ничего не возвращают, в расте тупо отсутствуют как класс.

Из-за того, что выражения типа if или match или любые блоки кода — let x = { ... };, где блок кода показан многоточием — могут возвращать значения, вместо ебаной лапши, где непонятно, куда и что возвращает return, разделили возврат из блока и возврат из функции. Так что return всегда закрывает функцию, а не блок; возможность опустить return в конце функции — просто синтаксический сахар, потому что функция выглядит как тот же блок кода.

Проще говоря: отсутствие return при возвращении значения — это важная часть раста, и ты можешь её удалить из большей части раста, не сломав какой-нибудь код вроде

fn x() {
let x = if true { return; } else { 1 };
println!("{}", x);
}
277 1954528
>>1954275
Подавляющее большинство описывается поговоркой "когда коту делать нечего, он яйца лижет"
278 1954780
>>1954528
Что ты хочешь услышать? Почему тебе стоит продолжать писать на плюсах в 2021? Пиши, разрешаю. С киллер-аппом немного таки беда, это правда, но кому сегодня нужен киллер-апп? От того что линукс и постгрес написаны на си, полмира не бежит делать свои проекты на си.
279 1955332
>>1954106
>>1954281
>>1954429

Спасибо за ответы, по большей части прояснилось
Остался только вопрос консистентности
Правильно ведь я понимаю, что в ситуациях, вроде такой:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=aaaa77e90c6487183ee3fdcf9d348173
Другого выбора (кроме явного return) у меня нет?
280 1955379
>>1955332
Выглядит как линейная цепочка if | else if | else, которая тоже одно единственное выражение.

if {
....раз
....два
....три
....true // возможный результат цепочки if
} else if {
....раз
....два
....три
....false // возможный результат цепочки if
} else {
....раз
....два
....три
....true // возможный результат цепочки if
}

Но если тебе проще где-то использовать return, нет ничего плохого чтобы таки использовать return.
281 1955383
>>1955332
В моей голове явный return это маркер раннего выхода из функции.
282 1957614
в прошлый раз руст мне мозг сломал, но пришло время попробовать еще разок
283 1957638
>>1954097
Забавно что никто из ответивших не упомнул что любой блок - {} в расте - это выражение, а значит возвращает результат:
let expr = {};
expr = 1; // error, as {} returns ()
284 1957657
>>1957638

>это выражение


в русте все возвращает что то
285 1957709
>>1957657
Объявления item'ов ( https://doc.rust-lang.org/reference/items.html ) ничего не возвращают.
let например.
286 1958001
Есть ли нормальный автокомплит в IDE/IDE с нормальным автокомплитом для сабжа? Пытаюсь писать на расте в vscode со стандартным плагином, вообще не то пальто. Я хочу чтобы все возможные варианты работы с объектом мне показывались в менюшке, как это в плагине к Go.
287 1958023
>>1958001
rust-analyzer нормально работает. Нужно сделать Open Folder.
288 1958024
>>1958023
Под "нормально работает" ты имеешь ввиду "тормозит как жава иде" и "жрет гигабайты памяти"?
289 1958032
>>1958024
Если писать свою ОС, то наверное, но мне для мелких экспериментальных крейтов хватает. Не то чтобы мне светит писать что-то в продакшене.
290 1958040
>>1958032
У меня растущее фулстек приложение на 20k/3k строк и 10 гигов оперативы сжираются в никуда. Боюсь представить что происходит с проектами побольше.
291 1958053
А вот если хруст-анализер переписать на сишечке, он будет летать, наверное.
292 1958057
>>1958053
Если его на написать на нормальном расте он тоже будет летать. Моя гипотеза - жава головного мозга у автора. Люди с жава бэкграундом привыкли жрать говно и что софт тормозит и жрет гигабайты памяти.
293 1958099
>>1958057
а что люди с жаба бэком забыли в языках аля цэпэпэ
294 1958109
>>1958099
>>1957473 →
https://matklad.github.io/resume/
Автор хруст-аналайзера работал на джетбрейнс и лабал на котлине перед этим.

Джава травмирует мозг, как бэйсик когда-то: https://www.goodreads.com/quotes/79997-it-is-practically-impossible-to-teach-good-programming-to-students
295 1958159
>>1958057
>>1958109
Так кто виноват, что чистые хрустовики способны написать только кастрированный пет? Вот и приходится звать на помощь джява-макак
296 1958163
>>1958159
Мне кстати rls по прежнему нравится больше. Да, он чаще не может справится с поставленой задачей, но пока я пользовался им, у меня не кончалась память на не самой слабой машине и не висло все к хуям, потому что компьютер пытается взлетать и отправится на марс на кулере.
297 1958250
>>1958023

>Нужно сделать Open Folder.


По-русски можно? Я нагуглил проблемы на single file, can't find Cargo.toml Но у меня каталог прожекта создан cargo init my_app
298 1958253
>>1958024
Да на память пофиг, я и половины из доступной не использую, хотя сижу на гномощели.
299 1958258
А вообще, наверное, я не правильно выразился. Автокомплит работает по либе. Что-то типа std::fs::read_to_string комплитит, но не работает с my_string.retain. Я хз к чему это относится, я ньюфаженька в расте.
300 1958268
>>1958253
У меня 16 гигов и мне приходится периодически убивать rust-analyzer и/или firefox чтобы система не зависла, потому что оно начинает течь.
Снимок экрана от 2021-03-05 16-15-54.png52 Кб, 408x582
301 1958307
>>1958250
Шел 2021 год, в pr показывают как открывать файлы.
302 1958312
>>1958307
Блять, я так и сделал. Ладно, хрен с ним. Лучше скажите как рефакторнуть функции, если я подобавлял в начале имени нижнее подчёркивание чтобы оно не писало мне варнинги. Как сделать глобально #[allow(dead_code)] я не нашёл.
303 1958314
>>1958312
А то я пишу снизу вверх и меня уже начинает бесить куча варнингов.
304 1958316
>>1958312
! #[allow(dead_code)]
В начало файла добавь
image.png28 Кб, 662x428
305 1958321
>>1958316

>! #[allow(dead_code)]

306 1958322
>>1958321
Ага, #![allow(dead_code)]
307 1958453
>>1958109

>Джава травмирует мозг


жабисты вообще любят оверинжинирить и уходить в десяток вложенностей
308 1961409
>>1958453
Перхапс можно в картинки взять пикчи отсюда https://github.com/vydd/sketch
309 1961464
>>1961409
Объебался тредом, простите.
310 1962867
>>1880122 (OP)
Что скажете о GUI библиотеке Iced? Достаточно ли она зрелая?
311 1962869
>>1962867
Юзабельная. Слегка подбешивает что нужно стейт для виджетов таскать самому. Ну и в плане кастомизации все очень слабо.
312 1967810
чет я в главе по трейтам прям поплыл
313 1967813
>>1967810
А шо с ними?
314 1967855
>>1967813
необычно, вроде интерфейсы, а вроде и нет.
315 1967856
>>1967855
Чому бы и нет?
316 1969704
На сколько есть смысл изучать rust?
317 1969724
>>1969704
Если веришь в webassembly и не хочешь лезть в плюсы то смысл изучать есть
318 1969751
>>1969724

>не хочешь лезть в плюсы


никто не хочет лезть в кресты
319 1970130
Простой вопрос!

Листаю тур. Конкретно пример с parse()
https://tourofrust.com/71_en.html
Там используется следующая конструкция
let b = a_string.parse::<i32>()?;
соответственно у main() появляется необходимость результат этого действия возвращать и появляется
fn main() -> Result<(), std::num::ParseIntError>
С () всё понятно, мы в конце программы явным образом указываем, что возвращаем Ok(()), а откуда появляется std::num::ParseIntError?
Каким образом я могу выяснить, что мне нужен именно этот метод(?) ParseIntError в num в std? Или что мне может подсказать, что именно он, если я ошибся?

Что я пробовал в редакторе:
Оставлять пустым — "wrong number of type arguments: expected 2, found 1" и пытается объяснить мне, что числоаргументов нужно соблюдать.
Ставить туда юнит () — "couldn't convert the error to `()`" и пытается научить меня, что некоторые типы не умеют в некоторые трейты и как их имплементировать.
Ставить туда Err — "expected type, found variant `Err`" и рассказывает, что возвращать надо тип, а не вариант.
Ставить туда core::result::Result, что мне подсказывали вместе с 4 другими вариантами в последней ошибке, ну и я так понял, это тип для Err — "wrong number of type arguments: expected 2, found 0" и учит меня опять первому.
Переменную, допустим, е — "cannot find type `e` in this scope"
Константу 5 — "constant provided when a type was expected"
На этом моя фантазия иссякла.

Пошёл смотреть доки по функциям (точнее я это сделал почти сразу, но так нарратив веселее), нашёл
https://doc.rust-lang.org/stable/std/primitive.str.html#method.parse
Там сигнатура обозначена как
-> Result<F, <F as FromStr>::Err>
Соответственно попробовал <F as FromStr>::Err> — "failed to resolve: use of undeclared type `FromStr`"

Кликнул на Err, каконец-то увидел пояснение, что "The error type is specific to implementation of the trait." (что было, конечно, очевидно из текста примера)

Так вот, как я, простой иван из города тверь, должен понять, какая ошибка там нужна? Кроме того, чтобы сделать поиск по слову parse
https://doc.rust-lang.org/stable/std/?search=parse
и найти 10 разных видов ошибок с этим словом в названии из совершенно разных модулей? Как выбрать нужную? А если в названии слова parse не было, то как бы их, вообще, можно было откопать?
319 1970130
Простой вопрос!

Листаю тур. Конкретно пример с parse()
https://tourofrust.com/71_en.html
Там используется следующая конструкция
let b = a_string.parse::<i32>()?;
соответственно у main() появляется необходимость результат этого действия возвращать и появляется
fn main() -> Result<(), std::num::ParseIntError>
С () всё понятно, мы в конце программы явным образом указываем, что возвращаем Ok(()), а откуда появляется std::num::ParseIntError?
Каким образом я могу выяснить, что мне нужен именно этот метод(?) ParseIntError в num в std? Или что мне может подсказать, что именно он, если я ошибся?

Что я пробовал в редакторе:
Оставлять пустым — "wrong number of type arguments: expected 2, found 1" и пытается объяснить мне, что числоаргументов нужно соблюдать.
Ставить туда юнит () — "couldn't convert the error to `()`" и пытается научить меня, что некоторые типы не умеют в некоторые трейты и как их имплементировать.
Ставить туда Err — "expected type, found variant `Err`" и рассказывает, что возвращать надо тип, а не вариант.
Ставить туда core::result::Result, что мне подсказывали вместе с 4 другими вариантами в последней ошибке, ну и я так понял, это тип для Err — "wrong number of type arguments: expected 2, found 0" и учит меня опять первому.
Переменную, допустим, е — "cannot find type `e` in this scope"
Константу 5 — "constant provided when a type was expected"
На этом моя фантазия иссякла.

Пошёл смотреть доки по функциям (точнее я это сделал почти сразу, но так нарратив веселее), нашёл
https://doc.rust-lang.org/stable/std/primitive.str.html#method.parse
Там сигнатура обозначена как
-> Result<F, <F as FromStr>::Err>
Соответственно попробовал <F as FromStr>::Err> — "failed to resolve: use of undeclared type `FromStr`"

Кликнул на Err, каконец-то увидел пояснение, что "The error type is specific to implementation of the trait." (что было, конечно, очевидно из текста примера)

Так вот, как я, простой иван из города тверь, должен понять, какая ошибка там нужна? Кроме того, чтобы сделать поиск по слову parse
https://doc.rust-lang.org/stable/std/?search=parse
и найти 10 разных видов ошибок с этим словом в названии из совершенно разных модулей? Как выбрать нужную? А если в названии слова parse не было, то как бы их, вообще, можно было откопать?
320 1970144
>>1970130
Кажется, нашёл. Надо в списке Implementors, под пояснением про Err надо, в строчке с нужным тебе типом кликнуть не на i32, не на [src], не на любое другое место в строке, а на [+] слева. Тогда появится строчка
type Err = ParseIntError
В ней надо кликнуть на ParseIntError и там можно увидеть, что это структура
std::num::ParseIntError
её и нужно указывать в fn main() -> Result
321 1970277
>>1970130
непонял полотна ты парсишь строку и результатом идет енам резалт ок и ошибка и ошибка эта будет парс инта, так как ты парсишь инт, ты можешь ее обработать, вернуть в вызывающий код или просто выкинуть панику
322 1970393
>>1970277

>и ошибка и ошибка эта будет парс инта


Ты так говоришь, будто легко угадать, что это ParseIntError, а не какой-нибудь ParseErrorInt, или NotIntError. Почему ни один из инструментов не может это подсказать? Ни компилятор ни clippy.

К тому же, даже если угадаешь базовое название, этого недостаточно, компилятор предлагает три варианта на выбор с одинаковым именем:
core::num::ParseIntError
pin_utils::core_reexport::num::ParseIntError
std::num::ParseIntError
какой я должен взять, и чем они отличаются?
323 1970403
>>1970130
Придумал алгоритм:

Пишешь туда какой-нибудь тип (с другими вариантами не сработает), например String
fn main() -> Result<(), String>
Компилятор жалуется на "couldn't convert the error to `String`" и в одном из пояснений написано, что
" ^ the trait `From<ParseIntError>` is not implemented for `String`"
откуда можно вытащить, что это ParseIntError, который можно записать в результат.
fn main() -> Result<(), ParseIntError>
Тогда выдаёт уже другую ошибку: "cannot find type `ParseIntError` in this scope". и предлагает несколько вариантов, где этот ParseIntError может быть. В том числе и эталонный std::num::ParseIntError, но как выбрать именно его, я всё ещё не понял.
324 1970450
>>1970393
это одна ошибка, просто std экспортирует ее из core, да и вообще все что есть в коре есть и в стд.
то есть если не хочешь ссылатся на стандартную библиотеку/она недоступна по каким то причинам можешь ссылаться на ядро.
325 1970456
>>1970450
Спасибо, сейчас-то мне это понятно, но как быть, если там больше вариантов будет? Не только pin_utils::core_reexport::num::ParseIntError, а разные, и не будет, например ни core::, ни std::?
image.png98 Кб, 1688x572
326 1970457
>>1970130
я не ракообразный, так, поигрываюсь, но у меня в vscode/rust-analyzer получилось так:
1. a_string.parse - Go to definition (F12)
2. parse<F: FromStr> - Go to definition (F12)
3. pub trait FromStr - Go to implementations (Ctrl+F12)
4. на этом шаге появляется дохуя вариантов, но нас интересует файлик /home/anonymous/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/num/mod.rs, где на строках 778-789 находим пикрелейтед.
327 1970459
>>1970450
да чтобы упредить вопрос а нахуя это надо.
кор дизайнился для работы на низкоуровневой голом железе, фактически для ембедедщины и тд, она меньше и проще.
328 1970460
>>1970457
ссылка на сам ParseIntError есть на 55 строке в том же файле.
329 1970461
>>1970456

>и не будет, например ни core::, ни std::?


это как ты ошибки без стд кидать собрался?
330 1970472
>>1970461
Пока не знаю, но если там написать вариант, например, Err, то предлагают
anyhow::private
core::result::Result
futures_util::__private
pin_utils::core_reexport::result::Result
and 3 other candidates
Тут тоже core есть, но std уже нет, так что предположу, что и кора тоже может не быть (или, как минимум, не предлагаться в открытых вариантах)

Ты говоришь, что кор будет обязательно? Хорошо, спасибо, запомню.
331 1970474
>>1970472

>core::result::Result


std::result::Result тоже есть можешь проверить, фома неверующий
332 1970476
>>1970457

>но нас интересует файлик


А как определить, какой файлик нас интересует, и, тем более, найти там строки 778-789? Спасибо, что помогаешь разобраться.
333 1970478
>>1970474

>std::result::Result тоже есть


Да, но он не написан, поэтому без догматического знания, что "всё из core есть в std", я об этом не догадаюсь. А я хочу меньше догадываться и больше читать справку, которая мне пояснит, где я дурак.

>фома неверующий


Я простой иван из города тверь, и я хочу разобраться. Готовый ответ уже был в примере.
334 1970480
>>1970478
ну теперь будешь знать
335 1970481
>>1970480
Я за этим и пришёл!
336 1970508
>>1970476
ну, после первого шага мы знаем, что метод parse под капотом использует трейт FromStr. далее, зная, как примерно работают трейты, мы понимаем, что нужно искать что-то вроде `FromStr for X`, где X это наш тип, а он нам тоже известен - i32.

чтобы найти все такие места в коде, тыкаем Go to implementations на FromStr и видим пикрелейтеды.

варианты с char, bool сразу отметаем. отметаем float_impl (т.к. там f32, f64, это точно не i32). остаются mod.rs и nonzero.rs. идем в nonzero.rs и видим, что там используются какие-то расширения над i32, но у нас-то обычный i32, поэтому тоже отметаем.

остается mod.rs, собственно тыкаем сразу в вызов макроса и попадаем на 789 строку. убеждаемся, что тут нужный нам обычный i32.

остается только понять, что же за ParseIntError (rust-analyzer мне тут не позволяет делать Go to definition, наверное из-за того, что это часть макроса), придется искать вручную. объявление `pub use error::ParseIntError;` встречается на 55 строке.

вот, собственно, и все.
337 1970516
>>1970508
Спасибо!
338 1970572
>>1970508
вот что значит людям делать нехуй
339 1970577
>>1970572
Он нашёл, а ты не нашёл. Ты теперь завидуешь.
340 1970579
>>1970577
че там искать, если я знаю что откуда кидается
341 1970597
>>1970579
ты знаешь 100% кодовой базы раста? все патчи проходят через тебя? я описал очевидному новичку общий принцип самостоятельного нахождения ответов на подобные вопросы, неважно, в std лежит код или в каком-то никому неизвестном крейте. что касается знаний, сегодня ты знаешь, завтра это поменяют, знания устареют.
342 1970610
>>1970597
у раста хорошие доки
343 1970617
>>1970610
Разве не это мы только что проверили? Ответ пришлось искать в исходных кодах.
344 1970692
>>1970617
если б проситель изначально знал знал что кор=стд этого вопроса даже не возникло бы, ибо все легко гуглится по интернет доке, тут вопрос изначально в этом был, а не где искать.
345 1970694
>>1970692

>если б проситель изначально знал


>у раста хорошие доки

346 1971723
>>1970130

>а откуда появляется std::num::ParseIntError?


>let b = a_string.parse::<i32>()?;


Знак вопроса возвращает ошибку, если что-то пошло не так. Можно заменить на unwrap() и убрать Result из определения.

>Каким образом я могу выяснить, что мне нужен именно этот метод(?) ParseIntError в num в std?


Можешь поставить Box<dyn std::error::Error>>

> Как выбрать нужную?


f32 это у нас число? Значит num.
347 1971824
>>1971723

>Можешь поставить Box<dyn std::error::Error>>


О, а это где можно прочитать было?
348 1972026
>>1971824
В растобуке.
349 1972035
>>1972026
В какой главе? Можно ссылку? Почему в обычной документации нет?
350 1972119
>>1972035
до смартпоинтеров не дочитал что ли
351 1972141
>>1972119
Дочитал. Я понял синтаксис, я не понял, как узнать, что std::error::Error это трейт (имплементацией которого для parse::<i32> является std::num::ParseIntError), который нужно туда засунуть?

Здесь не написано
https://doc.rust-lang.org/stable/std/primitive.str.html#method.parse
здесь тоже
https://doc.rust-lang.org/stable/std/str/trait.FromStr.html#associatedtype.Err
352 1972142
>>1972141
в русте почти все трейты
353 1972146
>>1972142
Вот прос не в этом. Где прочитать, что std::num::ParseIntError — это имплементация std::error::Error, а не kern::oshibka::Mistake? В документации по ссылкам не написано.
355 1972163
>>1972151
Вопрос в том, как попасть в Trait std::error::Error из
https://doc.rust-lang.org/stable/std/primitive.str.html#method.parse
?
356 1972171
>>1972163
а метод парс что возвращает?
357 1972173
>>1972171
-> Result<F, <F as FromStr>::Err>
Можно кликнуть на FromStr и на Err
358 1972176
>>1972173
а еще на резалт и прочитать описание модуля, а лучше прочитать главу учебника про обработку ошибок еще раз.
359 1972178
>>1972176
Ещё раз, как по документации понять, какую ошибку она вернёт? Почему нужно лезть в главу учебника про обработку ошибок? Это что вообще за подход? Почему сигнатуры функции не достаточно, чтобы с ней работать?
360 1972179
>>1972176

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


Там тоже std::error::Error нет.
361 1972256
>>1972178

>parse<F>(&self) -> Result<F, <F as FromStr>::Err>


>where F: FromStr,


>Associated Types


>type Err


>The associated error which can be returned from parsing.


>Required methods


>pub fn from_str(s: &str) -> Result<Self, Self::Err>


>Parses a string s to return a value of this type.


If parsing succeeds, return the value inside Ok, otherwise when the string is ill-formatted return an error specific to the inside Err. The error type is specific to implementation of the trait.

Трейт FromStr требует ошибку Err и метод from_str.
Конструкция parse::<i32>() означает вызов метода имплементированного для типа i32.
Идем сюда:
https://doc.rust-lang.org/std/primitive.i32.html
На странице находятся все трейты типа i32.
Делаем поиск по странице FromStr, находим

>impl FromStr for i32


>type Err = ParseIntError


>The associated error which can be returned from parsing.



РАСТ ЭТО ПРОСТО И ПОНЯТНО
362 1972257
Раст сейчас чаще в вебе используют? Я где-то читал что писать какие-нибудь десктопные приложения пока что на нем не удобно. Правда ли это? Или все таки стоит начать его изучать. Пока что пишу на плюсах
363 1972266
>>1972256

>>type Err = ParseIntError


Нет, это я уже нашёл, даже лучшим способом, без

>Идем сюда:


на рандомную страницу, а напрямую по ссылкам >>1970144

Теперь задача, как найти std::error::Error или сразу
-> Result<(), Box<dyn std::error::Error>>
364 1972288
>>1972266
Box<dyn Error> значит поинтер на любой объект в куче, для которого существует имплементация трейта Error. Для типа ParseIntError такая имплементация есть
365 1972300
>>1972288
Да я уже даже нашёл, просто тот анон хвост распушил, книжку меня отправляет читать, а сам в документации прямой путь показать не может, только уже известное ему слово загуглить.
366 1972320
>>1972300
можешь нахуй сходить.
367 1972884
>>1972300

>Почему надо читать учебник по математике? Почему нельзя просто знать, что 1 + 1 = 2, и из этого сразу понять как быстро умножать и делить в столбик?



У раста охуенные доки, но это не совсем учебник. Ты первый раз видишь раст, но не читаешь учебник по расту. На сишке (или что ты там до раста учил) ты тоже сразу ебошил код, иногда заглядывая в std reference?
368 1972911
>>1972884
Ну, смотри, объясню разницу. Посмотрим на другие методы вокруг. Промотаем вниз
pub fn is_ascii(&self) -> bool
Сразу же понятно, как функцией пользоваться, согласен?
Посмотрим вверху, там посложнее
pub fn trim_right_matches<'a, P>(&'a self, pat: P) -> &'a str
Непонятно, что такое P, правильно? Так сразу внизу написано
P: Pattern<'a>,
и пояснено
The pattern can be a &str, char, a slice of chars, or a function or closure that determines if a character matches.
Тоже список примитивных типов.

Вот такое же объяснение я там ожидал увидеть. А там только
Will return Err if it's not possible to parse this string slice into the desired type.

И как это понимать? Вместо bool я ставлю переменную типа bool — она работает, вместо P я ставлю переменную типа Pattern — она работает. Вместо Err я ставлю.. стоп! Err не тип! И начинается пляска с тем, какой же нужен тип. Могли бы ссылку на табличку дать, как в паттерне, могли бы указание на идиому Box<dyn std::error::Error> добавить. Но ничего этого нет.

Не говоря уже о том, что это хотелось бы в компиляторе или в clippy в качестве подсказки увидеть, потому что там пробрасывается вверх уже известная компилятору ошибка (на parse же он не жалуется, жалуется на main), а не лезть в документацию.
369 1972922
>>1972884
Это один из тех людей, которые свято уверены, что по учебникам научиться программировать нельзя, и единственный способ это практика без понимания теории.
370 1972934
>>1972922
Не надо мне слова в рот класть, я ничего подобного не говорил. Я говорил, что в документации должно быть прописано, как пользоваться функцией. Чтобы не было такого, что тебя просят указать определённый тип, но нигде не пишут, что за тип и в зависимости отчего какой указывать. Чтобы не было

>укажите тип


>bool


>не тот тип


и нигде внятно не написано, какой тип тот
371 1972935
>>1972922
и потом пишут такую лютую лапшу что сами разобратся не могут
372 1972948
>>1972934

>Не надо мне слова в рот класть, я ничего подобного не говорил


Да, не говорил, но твои действия говорят за тебя. Прочитай учебник и не выёбывайся.
373 1972949
>>1972948
Я читаю, но документация должна быть в документации, а не в учебнике.
374 1972954
>>1970457

>($($t:ty)*)


Блядь, какие же вы конченные! Пиздец просто.
375 1972959
>>1972949
У вас denial. Не волнуйтесь, это пройдет.
376 1972963
>>1972959
Что я отрицаю? "Документация должна быть не в документации" это?
377 1972967
>>1972963
Что ты затупил, и вся нужная инфа есть.
378 1973006
>>1972911
Во-первых, ты проебался, потому что Pattern не тип, а трейт. Вот Err — это как раз associated type, и можно узнать конкретный тип, посмотрев реализацию трейта у нужного тебе типа. Ты никак не можешь подставить свой тип в Err, и тебе нахуй не надо знать какой там тип, если ты не хочешь обрабатывать ошибку. Но если ты хочешь обрабатывать ошибку, то ты уже знаешь какой там тип, иначе как ты нахуй обработаешь ошибку, если ты нихуя не знаешь про тип ошибки?

А если ты тупо вверх пробрасываешь, но ничего не делаешь с ошибкой, то ты не понимаешь, что ты делаешь.
379 1973055
>>1972954
Что не так?
380 1973060
>>1972967
Но почему её так сложно найти? Почему предложено было искать либо через исходные коды >>1970508, либо через отдельный поиск >>1972256

Я пытался найти прямой путь от
https://doc.rust-lang.org/stable/std/primitive.str.html#method.parse
к Box<dyn std::error::Error>, у меня не получилось.

>>1973006

>А если ты тупо вверх пробрасываешь, но ничего не делаешь с ошибкой, то ты не понимаешь, что ты делаешь.


Но это же просто пример того, как фейлится main, если использовать fn()?; и получить ошибку. Мейны, которые могут завершиться с ошибкой не делают?
381 1973069
>>1973060
Делают, но с какого хуя документация к функции parse должна тебе рассказывать про глобальный функционал типа Box<Trait>? Вот если бы ты читал учебник, то там бы ты сразу увидел вот это вот:
https://doc.rust-lang.org/book/ch09-02-recoverable-errors-with-result.html#the--operator-can-be-used-in-functions-that-return-result
382 1973093
>>1973069

>Делают


Тогда я не понял, к чему было

>А если ты тупо вверх пробрасываешь, но ничего не делаешь с ошибкой, то ты не понимаешь, что ты делаешь.



>но с какого хуя документация к функции parse должна тебе рассказывать про глобальный функционал типа Box<Trait>


Хотя бы просто про трейт std::error::Error. Про std::num::ParseIntError я же нашёл (вы даже с этим не справились), почему оттуда внятно ничего не ведёт?

>Вот если бы ты читал учебник


У меня возникает ощущение, что вы читали только учебник и теперь пытаетесь доказывать, что отлично разбираетесь в очень удобных доках, при этом 3 не отвечая на простой вопрос, а рассказывая "ну иди другую книжку почитай, в документации к языку такого не пишут". Я хочу удобную документацию (и подсказки компилятора), а вы что-то хотите, кроме как унизить новичка, пытающегося в этой документации разобраться?
383 1973112
ну очевидный жир
384 1973132
>>1973093

>Хотя бы просто про трейт std::error::Error


Ты совсем тупой дегенерат? В расте over 9000 функций, которые возвращают Result<T,E>, ты предлагаешь к каждой из них давать ссылку на трейт, который может быть даже не реализован для E, просто потому что ты хочешь иметь учебник в доках, а не в учебнике?

Ещё раз для тупых и необучаемых: доки и учебник — это разные вещи. Специально покажу разницу между неудобными и удобными доками.

Неудобные:

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

Удобные:

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

Примеры:
1 + 1 = 2
2 + 3 = 5
1 + -1 = 0
-1 + -1 = -2

С какого хуя тебе в сложении должны рассказать об умножении в столбик, животное?

Если бы ты прочитал описание Box<T>, ты бы узнал, что T: ?Sized. Но тебе это ничем не поможет, потому что ты недостаточно умён, чтобы зная только про 1+1=2 дойти до мнимых чисел, и точно так же ты недостаточно умён, чтобы понять, что если T: ?Sized, то можно сделать Bpx<Trait>. Так что не выёбывайся, а то заебал.
385 1973147
>>1973132
А это случайно не тот челик который в фак треде советует доку читать вместо учебников
386 1973171
>>1973132

>С какого хуя тебе в сложении должны рассказать об умножении в столбик, животное?


>С какого хуя тебе в std::num::ParseIntError должны рассказать об std::error::Error, животное?


Понял твою мысль, спасибо.
Screenshot from 2021-03-21 17-18-21.png3 Кб, 404x55
387 1973342
>>1973171
Нужно срочно убрать.
388 1973352
>>1973342
Согласен, непорядок. С какого хуя тебе в сложении должны рассказать об умножении в столбик, животное?
389 1973426
>>1973352
Как говорит вики: "умножение определяется как многократное сложение". Ссылки — это не рассказывание.
image.png18 Кб, 396x165
390 1976444
Вы зачем письмо против Столлмана написали
sage 392 1976966
>>1976444
Кошкодевочки все правильно сделали, Торвальдс, Столман, вся эта старая гвардия топят явно или неявно за меритократию и элитизм в мире софтостроения, а все прогрессивные девочки такое не любят, а любят свободу для всех, равенство, дайверсити и инклюзивити, что полностью противоречит фашистской меритократии белых бумеров-диктаторов из прошлого столетия.
toptal-blog-image-1455523836424-d8d3badee6b3a0c34711947d291[...].jpg144 Кб, 641x545
393 1977047
>>1880122 (OP)
Это код из учебника в шапке:

let mut guess = String::new();
let guess: u32 = guess.trim().parse().expect("Please type a number!");

Расскажите, почему это не динамическая типизация?
Потому что если let, то типа не считается?
394 1977075
>>1976966
Разве там не с большой долей иронии всё это написано?
395 1977078
>>1977047
Не считается. Есть Any если хочется.
396 1977121
>>1977075
Нисколько, если все будет так продолжаться штульманы превратят опенсорс в тусовочку для себя и своих подсосов.
397 1977172
>>1977047
В каком место она динамическая если все типы указаны явно?
398 1977205
>>1977047
В расте просто можно создавать переменные с одинаковыми названиями в одной области видимости. При этом первая переменная становится недоступной после объявления второй. При этом у каждой переменной есть свой собственный тип.

В языках с динамической типизацией можно делать так:

let a = 1;
a = "abc";

В расте так нельзя.
399 1977220
>>1977172
Неявное приведение типов означает слабую, а не динамическую типизацию, но если ты решил доколупаться, то это тоже есть в учебнике

let spaces = " ";
let spaces = spaces.len();

Или

let x = five();
400 1977224
>>1977205
Ну, разница только синтаксическая, в rust мы говорим let. Или я что то не догоняю?
401 1977251
>>1977224
Не знаю. Объясню еще раз: let x = ...; создает новую переменную x, с новым типом. Просто x = ...; присваивает значение существующей переменной. У единожды созданной переменной тип изменить нельзя. В языках с динамической типизацией - можно. В расте присвоить переменной значение другого типа нельзя, но можно создать новую переменную с другим типом, с тем же названием. Но это будет уже не та переменная.
402 1977304
>>1977251
Это я понимаю анон.
В одном случае мы старой переменной присвоили новый тип, в другом дропнули её и создали с тем же именем но другим типом.
В чём существенная разница?
403 1977321
>>1977304
Существенная разница в том что в динамических языках тип таскается в памяти в рантайме. Поэтому ты делаешь проверку типа в рантайме. В случае с растом этой инфы в рантайме нет, потому что все проверки делаются статически на этапе компиляции.
404 1977433
Прочитал раст бук, в целом понравилось. Много чего не понял, но под конец уже скучновато стало, так что буду на примерах разбираться.

Кто что вообще пишет на расте, кроме микросервисов для веба?
Хотел бы для себя что-то написать, но гуи не нужен, игрушку думаю не потяну с 2 фултайм работами, нужно что-то, на что можно полчаса/час в день уделять и чтобы по фану было.
405 1977471
>>1977433
https://bfnightly.bracketproductions.com/

Книжка уже старовата, да и некоторые вещи там хуёво написаны, но если не писать игори, то что вообще писать? Хотя я лично рекомендую Legion, а не Specs. Первый намного круче.
406 1977697
>>1977433
напиши рей трейсер, это не так сложно как кажется на первый взгляд, можно уложится в 1000 строк кода, а как работает каждая функция как раз можешь по пол часа разбирать, вывод можешь в картинку сделать или в гуи если охота с опенгл поебаться, но тогда уже 1к строк не уложишься
407 1977895
>>1977304

> в другом дропнули её



Не дропнули. Дропается она как обычно в конце блока, просто обратиться по имени не получится, но можно сохранить ссылку.
408 1978390
>>1977895
Это тоже однохуйственно. Вот этот анон >>1977321 правильно объяснил: компилятор весь код прочесывает на соответствие типов, и в рантайме все будет статически. Но я бы не стал использовать эту фичу, чтобы себя не наебать. Зачем это нужно вообще не могу понять, код не сокращает, ясности не вносит, но запутать может легко. Наверное я просто в философию не до врубился.
409 1978400
Анон, подскажи. В rust в основной либе многого нету, и предлагается cargo указывать зависимости в ручную в теге [dependencies]
А где есть вот этот реестр официальных но не включенных зависимостей для rust?
411 1978490
Мельком почитал макросы в rust - ну просто пиздец днина ебаная. Нет, по сравнению с изжопной дрисней из C(++) - это прогресс, но блять предоставлять доступ к AST языка в самом языке - сразу виден почерк титулованного говноеда. Бог дал им метапрограмминг на завтипах, но нет, лучше сделаем ебаного мутанта из сишных макросов
412 1978498
>>1976444
Пиздец, кринж. Зашкварят раст
413 1978599
>>1977433

>Кто что вообще пишет на расте, кроме микросервисов для веба?


Это толсто или тонко? Объясните.
414 1978601
>>1978498
Трансы пидорасы коммитили в upstream rust'а, значит зашкварили. По понятиям всё, раст - зашкваренный язык. А если ты скачивал офф. релиз на диск, то закшварил ты диск.
unnamed.jpeg35 Кб, 130x512
415 1978616
>>1978601
Трансы - не пидорасы, а уважаемые арестанты. А ты сам то кто по масти? Junior cuck sucker? Ну так не стесняйся, проходи дальше по треду и под шконарь, уважаемый товарищ петушок.
416 1978891
>>1978616
Как легко ты порвался от безобидной шутки.
417 1978939
>>1977047
Ну так type inference это попытка сделать статическую типизацию такой же лаконичной как динамическая. Так и было задумано. В динамической типизации больше гибкости за счёт меньшей производительности: ты можешь вращать ast прямо во время выполнения, делать eval, получать список переменных в текущем скоупе и прочие приседания которые невозможны/неоправданно сложны в статике.
418 1978941
>>1976966
Кошкодевочки просто хотят разрушить всё что есть в этом мире и построить новый коммунизм, где никто их не будет называть обидными словами. А опенсурс как цель для атаки выбран потому что там безобидные гики-задроты, на которых всем можно нажаловаться чтобы их закрыли. Даже если гиков-задротов закроют, никто не запрещает делать форки и начинать новые организации, libreoffice не даст соврать.
419 1978943
>>1978490

> метапрограмминг на завтипах


Много наметапрограммировал на завтипах? Давай нормальное сравнение со слайдами и почему нам это выгодно, иначе пиздабол простой.
420 1978991
>>1978941
Это лишь твоё мнение. Ты не способен ощутить на себе давление и токсичность всей это sci-fi bro культуры, потому что скорее всего сам являешься её частью. Кошкодевочки хотят сделать программирование доступным для всех желающих, без мобов токсиков-задротов и их ёбаных фюрерков Столманов, Торвальдсов и т.д.
421 1979071
>>1978991
Да чё не способен, сам бывал объектом травли и часто просто за глаза ненавидели лютой ненавистью. Вот только всяких любителей поднасрать админресурсом или травить толпой я ненавижу ещё больше.
422 1979085
>>1978991
Топят то они за правильные идеи, но "преисподняя полна добрыми намерениями, а небеса полны добрыми делами". Тенденцию к мировому тоталитаризму они только усугубляют. Столлман хоть борец против этого самого тоталитаризма. https://www.gnu.org/philosophy/right-to-read.ru.html глянь на год статьи. Кто тогда об этом думал кроме Столлмана?
0-1-e1490271.jpg34 Кб, 500x500
423 1979109
>>1979085

>Столлман хоть борец против этого самого тоталитаризма.


Это правильная вешь, но "преисподняя полна добрыми намерениями, а небеса полны добрыми делами". Тенденцию к мировому тоталитаризму он только усугубляет.
424 1979113
>>1979109
У него есть куча административного ресурса, политическое лобби, корпаративные юристы, которые зачмырили не одну кошкодевочку?
425 1979116
>>1979109
Столман свободный имакс написал в свое время. Кошкодевочки в основном только судятся, продавливают законы, искушая государство на подавление свободы слова.
426 1979381
>>1978991

>Кошкодевочки хотят сделать программирование доступным для всех желающих


А оно и сейчас доступно, просто кiшкодивчины не хотят собственно программировать, а хотят аппроприировать эту субкультуру, получать 300К\сек и чтобы их в попу целовали
427 1980343
А есть ли язык чтоб как Раст, ну памятебезопасный без сборщика мусора, но простой и легкий в освоении?
428 1980353
>>1980343
Nim какой-нибудь, хз правда насколько точно подходит
429 1980382
>>1980353
В нем сборщик мусора используется.
430 1980502
>>1980343
V может быть подойдет https://vlang.io/ https://github.com/vlang/v

>Is there garbage collection?



No. V uses memory management techniques from Rust, Swift, and implements its own: vlang.io/docs#memory-management
431 1980873
>>1980343

>как Раст, ну памятебезопасный


Лол
432 1981239
>>1980502
Сейчас раст советовать еще рановато, а ты V который нестабилен и с багами
433 1981241
>>1980343
Раст простой, ничего сложного нет, попробуй что-нибудь на нем написать
434 1981495
>>1981241
Видел там такие пиздец конструкции, и типа это норма, иначе нельзя.
435 1981500
>>1981495
раст для элиты, только сверхразум может осилить раст
436 1981512
>>1981500
Гордиться илитарностью от понимания хуево спроектированного синтаксиса в следствии кривой реализации благой идеи и переучивать либу и синтаксис раз в полгода - это хуже чем уметь трифорсить и троллить этим в б, а нынче это /postcount

Тредов создано: 67.
Тредов просмотрено: 12321.
Постов: 495.
437 1981636
>>1981512

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


Ты ошибся, это тред по расту, а не по крестоговну.
438 1981659
>>1981636

>переучивать либу и синтаксис раз в полгода


Да нет, вроде всё правильно.
439 1981743
>>1981659
Как будто в крестах не так. Выходит новый стандарт раз в три года, считай другой язык вышел, всё теперь надо делать по-другому. Ну ещё заучить талмуд новых undefined behaviour.
440 1981782
>>1981743
А причем тут кресты?
Тут про раст речь. Судя по твоим проекциям, я точно попал.
441 1981850
>>1981782
Какой дебильный тролль.
442 1981863
>>1981782
Куда попал? Даже ссаные жс и питон регулярно что-то меняют. Если хочешь штабильности, то тебе наверное в лисп, там и синтаксиса толком нет.
whv.jpeg7 Кб, 196x257
443 1981929
Написал в своё время прогурамку на расте, захотел переписать её на C, посмотрел зависимости

lmdb = "0.8.0"
sha1 = "0.6.0"
walkdir = "2.2.9"
clap = "2.33.0"
serde = { version = "1.0.98", features = ["derive"] }
serde_json = "1.0"
rustyline = "5.0.0"
regex = "1.2.0"
lazy_static = "1.3.0"
data-encoding = "2.1.2"

И чёт расхотел переписывать, но раст я ебал в рот, шта делоть?
444 1981954
Читаю последнюю главу пикрелейтед 1. В ней рассказывается, как собрать модуль ядра Linux с использованием https://github.com/lizhuohua/linux-kernel-module-rust .

Пытаюсь собрать самый простой проект из главы или пример из репозитория - и компилятор высирает тонны ошибок из пикрелейтед 2.

Кто-нибудь сталкивался? Всё свежее, сегодня обновлял.
445 1982222
>>1981495
Приведи пример, у меня прост их не было
446 1982784
>>1981954
выглядит так, что есть проблемы со стандартом компилятора, путями инклудов или дефайнами
447 1986443

>::


Зачем они эту хуйню сделали? Хотели цпп-дедам подлизать?
448 1986638
>>1986443
А как тебе бы понравилось больше?
449 1987137
>>1986638
через точку
450 1987171
>>1987137
Шарп-дедам подлизать?
451 1987231
>>1986443
Ты бы взглянул на первые версии раста, там один в один плюсы с небольшим сахарком. Они и есть цпп-деды, которых заебало. Многое пофиксили, но можно вывезти девушку из C++, но нельзя вывезти С++ из девушки
452 1987429
>>1987171
питонистам
453 1987436
>>1987137
Ало, у нас через точку доступ к полям структуры, ты охуеешь компилятор писать, чтобы разбирался с этими ебаными точками.
454 1987447
>>1987436
Ты не разбираешься в вопросе
455 1987705
Книгу по расту не читай @ вопросы сразу задавай:
Для чего нужен RefCell? Почему не заюзать Arc & Mutex?
Вопросы по AsRef & AsMut - для чего эти конверсии нужны? С виду внутри они ничего не делают. По сути возвращают тот же self.
Спасибо заранее за ответы
456 1988045
>>1987705

>Для чего нужен RefCell? Почему не заюзать Arc & Mutex?


>


Они используют атомики и, внезапно, мьютексы, поэтому без многопоточности только замедляют код.

>>1987705

>Вопросы по AsRef & AsMut - для чего эти конверсии нужны? С виду внутри они ничего не делают. По сути возвращают тот же self.


>



Всякие хаки с дженериками. Например в метод get HashMap<String, i32> можно передать ссылку на слайс, на String или на Cow<str>, и она все проглотит из коробки. Иначе пришлось бы везде писать as_str().
457 1988305
Хочу сделать консольную фигню, которая будет скачивать с веб-странички все пдф-файлы и вытаскивать из них картинки. Какие либы прошаренный анон порекомендует использовать, чтоб получилось модно, асинхронно и с огоньком?
459 1988324
>>1988305
Подобная параша наверное на паре строчек в питоне решается. А да я забыл, раст - это же язык для всяких веб-сервисов и прочей вебной параши.
460 1988337
>>1988309
>>1988324
Хочу сделать именно на расте для обучения, чтобы потом вебную парашу мутить.
461 1988349
>>1987705
Про рефселл тебе ответили, а вот про AsRef и AsMut у тебя неверные данные, ибо берётся ссылка на `Self`, а возвращается ссылка на `T`. Например, есть вот такой вот импл:

impl AsRef<[u8]> for str

В итоге в функцию, которая принимает `impl AsRef<[u8]>` ты можешь запихать как слайс байтов, так и строчку.

При этом и этих трейтов есть некоторое различие с Borrow и BorrowMut, но оно скорее философское.
463 1993888
Как идиоматически в расте вывалиться из мейнлупа?

Допустим, есть у меня fn main() {loop{}} с лупом внутри. Внутри которого функции, функции что-то делают. Что можно сделать внутри этих функций, чтобы выскочить? Сначала думал std::process::exit, но
>no destructors on the current stack or any other thread's stack will be run. If a clean shutdown is needed it is recommended to only call this function at a known point where there are no more destructors left to run.
так что не похоже.

Потом попробовал прямо из функции вызвать break; но ожидаемо получил

>cannot `break` outside of a loop



Ещё попытался явно задать, из какого лупа выходить, так что было fn main() {'main: loop {}}, но и это не работает. break 'main; получает >undeclared label `'main`
и тот же

>cannot `break` outside of a loop



Как надо?
464 1994300
>>1993888
Эм, в зависимости от возвращенного результата функции сделать брейк?
465 1994304
>>1993888

fn main() {
loop {
match looped_foo() { Continue => (), Break => break, }
}
}

enum ControlFlow { Continue, Break }

fn looped_foo() { Continue }
466 1994466
>>1994300
Хотел избежать обработки логики в теле цикла, но в итоге пришлось делать так.

>>1994304
Да, примерно так и получилось, но чтобы избежать повторения проверок, пришлось побольше логики вытащить наружу в enum и уже там обрабатывать.
467 1994616
Имеет ли смысл ставить найтли и использовать все новые фичи, когда учишься? Когда доваришься, они же как раз в стейбл попадут.
468 1994630
>>1994616
Разницы нет, поскольку нет работы. Учишь что нравится.
469 1994798
>>1994616
Лучше не надо, потому что либы реально ломаются между билдами.
470 1995090
>>1988305
Тебе бы лучше headless chromium и какой-нибудь puppeteer. Модно асинхронно и с огоньком не везде получится страницы проходить, а уж особенно мокрописьки качать, которые всевозможными способами защищены от автоскачивания.
471 1995953
>>1994798
Я бы вообще запретил либы писать новичку. По крайней мере не выкладывать в паблик какое-то время.
472 1996329
>>1995953
И голосовать должны только люди с достатком выше среднего.
473 1996376
>>1996329
Но ведь и правда сложно написать хорошее АПИ если ты новичок.
474 1996713
>>1996376
Ну как сложно. Из-за понятного синдрома не сложно. Просто получается хуета в основном.
475 1997250
>>1880122 (OP)
Пиздец, неужели нет простого способа сделать статический раст-бинарник, не прибегая к изъебствам вроде линковки с собранными из исходников либами (musl, openssl итд)? В go вот заебись сделали, хоть он и параша сам по себе.
476 1997268
Поставил себе VSCodium, накатил аддоны для Rust-а. Добавил папку с Cargo в PATH через xinitrc. Запускаю - выдаёт ошибку,
Rustup not available. Install from https://www.rustup.rs/
Чё за хуйня?
Rust установлен. cargo bueld/run в консоли работает. Даже прости господи, через аддон для Вима работает. А в этой херне - нет.
Чё за хуйня?
477 1997628
>>1997268
Судя по тому, что ты умничаешь с xinitrc, коренная причина в том, что ты в некотором роде долбоёб. Способов же прострелить себе ногу у тебя масса: ты мог поставить свой кодиум через какую-нибудь контейнерную срань типа snap; ты сидишь под wayland и ему поебать на твой иксовый конфиг; ты мог использовать ~ и переменные в PATH вместо прямых путей... Просто зайди в сеттингс-экстеншенс-раст, задай прямые пути, и не еби анону мозг.
478 1997681
>>1997250
Уточни что тебе нужно. Ты хочешь собрать статический бинарник, но чтобы библиотеки линковались динамически?
479 1997688
>>1997681
Нет, наоборот, я хочу слинковать все библиотеки статически. Чтобы готовому бинарнику не требовалось никакое окружение и его можно было бы использовать в docker-образах, собранных с помощью "FROM scratch". Легко добиться этого невозможно, т.к. растовые бинарники динамически слинкованы с glibc. Ок, можно вместо glibc использовать musl, но в таком случае, если проект использует, например, openssl, zlib, curl, придется еще и их собирать самому и тоже линковать статически. В то время, как в go достаточно, грубо говоря, "-tags netgo" и все заебись работает.

В расте самый мимнимальный подходящий для дефолтной сборки образ - distroless/cc-* от google, но там все равно 20 лишних мегабайт лежит. Хотелось бы и от них избавиться.
480 1997837
>>1997688

>придется еще и их собирать самому и тоже линковать статически.


Ну и что?
image.png88 Кб, 1370x516
481 1997848
>>1997837
Сильное усложнение сборки на ровном месте. На пикрелейтеде мой Dockerfile для сборки (с использованием cc-debian10). А вот так нужно собирать, если нужны статические либки: https://raw.githubusercontent.com/emk/rust-musl-builder/master/Dockerfile, nuff said.
482 1997988
>>1997268

>xinitrc


>.profile


>.bashrc


>.<whatever-sh>rc


Нахуй тебе иксовый rc для установки PATH, ты что, софтварный гомосексуал?
483 1997994
>>1997848
А если просто по виндузятской традиции класть so-шки рядом с бинарем?
484 1998002
>>1997688

>"-tags netgo" и все заебись работает


Каким образом? В самом трушном гугловом bazel, которым внутри гугла все бинари собирают статически, надо конкретно поебаться, чтобы статически залинковать сишный рантайм. У меня большие сомнения, что go линкует libc статически, ведь смысл внутригугловой политики all build static - в том, чтобы не управлять зависимостями их собственных библиотек, а не в том, чтобы полностью отвязаться от конкретной libc на дистрибутиве. Там и так везде свой унифицированный линукс, собранный и обновляемый из местной монорепы. А собирать все, кроме libc статически умеет и раст, и go, и их же bazel.

>>1997848
Алсо, ровные ребята давно перешли на unikernel, а ты все еще следуешь старинным традициям из 2018г.
485 1998050
>>1997994
distroless/cc-debian10 это оно и есть - so-шки в тех местах, где они должны быть (/usr/lib и прочее). Цель - сделать без so'шек, единый бинарь.
>>1998002
Ты, тащемта, прав, go не линкует (g)libc статически - он вообще не использует (g)libc.

>Go binaries are statically compiled by default.


but if you are using net or os/user, you will get a dynamically compiled executable (linked against libc)

>You will have to provide the netgo and usergo build tags to use the Go-based dns resolver (instead of libc's) and the Go-based function to query the Unix user “database” (instead of libc's).


>Каким образом?


Повторюсь, таким, что собранный из scratch докер-образ с гошным бинарем работает нормально, а с растовым - обсирается (ибо растовый бинарь динамически слинкован с libc, а libc в scratch нет).
486 1998074
>>1998050

>Ты, тащемта, прав, go не линкует (g)libc статически - он вообще не использует (g)libc.


Я нагуглил, что в go мейнстримный рантайм использует свою собственную реализацию для осуществления сисколлов. В rust есть нативные альтернативы libc, но их нельзя назвать мейнстримом, на котором работает подавляющее большинство пакетов. Так что вот така хуйня
487 1999672
Аноны, а как в расте с утиной типизацией? В книге трейты всегда привязываются к конкретным типам через impl блоки. А можно ли, как в плюсовых шаблонах, работать просто со всеми типами, совместимыми по сигнатурам методов и полей?
488 1999929
>>1999672
Можешь определить макрос вида impl $TypeName { } и вызывать для каждого типа. Это не универсально и крайне херово масштабируется, но работает.
489 1999932
>>1999672
В плюсах от этого бегут как от чумы, а ты тащишь это говно в раст. Ты нормален?
490 1999935
>>1999932

>В плюсах от этого бегут как от чумы


Орлы
491 2000063
>>1999672
fn foo(t: impl Into<DuckType>) { }

Утиная типизация не нужна, но если очень хочется, то есть варианты. Например, берёшь вот это вот:
https://docs.rs/frunk/0.3.2/frunk/generic/trait.Generic.html

и делаешь вот так вот:

fn foo<G>(g: G)
where
G: Generic<Repr = DuckType::Repr>,
{ let duck: Ducktype = frunk::convert_from(g); }

Но очевидно, что для работы такого дактайпинга тебе надо на все используемые типы задерайвить Generic трейт. Так что на типы из чужих либ ты таким образом дактайпить не сможешь.
492 2000093
493 2001099
494 2001628
>>1882589
похуй, пусть учат английский
495 2003695
>>1996713
Раст совсем не тривильный язык когда касается написания грамотного АПИ. И синдромы тут не при чем.
496 2003714
>>2001099
Как я понял const не подчиняется некоторым правилам работы с переменными. (Можно строго сказать что это и не переменная вовсе)

Во многих местах будет просто подставляться полное значение этой константы, также macro_rules! их не санитизирует. В результате можно увидеть приколюхи вроде таких:

https://dtolnay.github.io/rust-quiz/24
https://dtolnay.github.io/rust-quiz/3

Лично мне они были не очевидны.
h1.jpeg66 Кб, 276x361
497 2003717
>>2003695

>И синдромы тут не при чем


Я слышал кто-то сказал в этом треде синдром?
498 2006201
>>1999672
неявные привязки это плохо, ты в этих макаронах сам запутаешься потом
499 2007516
Хули ваш раст жрёт столько энергии?

Я с ноутом в метро 4 остановки проехать не успеваю, как от 100% до нуля батарея падает.

Другие языки с другими компиляторами такой проблемы не имеют.
500 2007525
>>2007516
Компилятор сложный, производит много выводов о типах. Но при этом хорошо оптимизирован так как ругали его за скорость работы.

Вот эти самые оптимизации компилятора научились в т.ч. как следует использовать все возможности процессора, потому и жрет как не в себя.
501 2007558
>>2007516
ты б еще идрис компилил и жаловался, что долго
502 2007654
>>2007558
идрис вроде перевыпустили хз че там
503 2007972
>>2007654
Он просто ещё сложнее стал, а 2.0 — это не перевыпуск, это из-за брикинг чейнджей ссемвер пришлось апдейтить.
504 2009397
А вот и оно! Когда-то я спрашивал про то почему в раст можно передать Some(х) в функцию, которая ожидает функцию. Прекрасное объяснение от matklad (контрибьютор в раст, обучает людей. всем рекомендую эти видео. Он еще вроде создатель rust-analyzer по крайней мере плагин для vscode показывается так) https://youtu.be/32cSLAe4aOw?list=PLlb7e2G7aSpTfhiECYNI2EZ1uAluUqE_e&t=918
505 2009437
>>2009397
а зачем?
506 2009440
>>2009437
А хрен его знает. Я тогда про пример отсюда это спрашивал: https://doc.rust-lang.org/rust-by-example/error/option_unwrap/map.html
507 2009450
>>2009437
Ошибся, вот https://doc.rust-lang.org/rust-by-example/error/multiple_error_types/option_result.html
Тут вроде делают Result::map(r, Some)
508 2009452
>>2009450
блин, а я вчитываюсь в код ничего не понимаю, уже думал что совсем отупел, лол
энивей спасибо за ссылки
Тред утонул или удален.
Это копия, сохраненная 5 июня 2021 года.

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

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