Почему нельзя переименовать rust? Я, да и думаю, что не только я, уже заебался гуглить по нему что-нибудь, и получать в выдачу гайды по этой ебанной игре для дебилов.
>>1880953 >Но мы не в вебе Еще один узко-велосипедный язык, ну нафига?
>разница между иммутабельной строкой c известном размером, и контейнером с динамически аллоцируемой хуйней есть Давно уже придумали решение неизменяемых строк и отдельных билдеров. Я еще уверен что не бесплатно стоит пройтись по utf-8 символов за аскии.
Как мне смапить на 264 строчке option так, чтобы тип соответствовал возвращаемому типу функции, нихуя понять не могу? Нужен Option<Box<dyn Expression>>, а выходит только Option<&Box<dyn Expression>>.
>>1881934 В том что нафиг такой билдер нужен. Нужна нормальная строка, чтобы я с юникод мог взять первый или последний символ по человечески, а не только аскии, чтобы не конвертить туда сюда, потому что авторам пригрелся слайс.
>>1882527 Строго говоря, в каноничном UTF-8 таки O(1), потому что границы чаров точно определяемы, просто там чуть сложнее индексовой операции.
>>1882545 Нет. В UTF-8 у чаров переменный размер от одного до четырёх байтов, но чары кроме аскии на хуй не нужны никому, потому что в любых языках с умлаутами или ещё какой-нибудь дрянью, одна и та же буква может быть как одним чаром, так и не одним чаром, но их надо обрабатывать как одну и ту же букву. Короче, строки кроме аскии это такая ебля, что ты охуеешь, если в эту нору полезешь.
>>1882579 Лол, ну ты и выдал. То есть пол миллиарда европейцев идут нахуй, китайцы идут нахуй, арабы идут нахуй, русские идут нахуй. Все идут нахуй, кроме американцев и прочих британцев, и то при условии что они не пользуются смайликами.
push_front мутирует вектор, а не, как я ожидал, создает новый вектор с добавленным элементом. Другие методы вектора все тоже мутирующие. А где иммутабельность-то? Или я что-то не понимаю?
>>1884274 ну блин, херня какая-то, почему вообще в языке, в котором по дефолту всё иммутабельное, коллекции полностью мутабельные? где нормальные иммутабельные коллекции-то взять?
>>1884756 Вот именно что коллекции по дефолту иммутабельные. Не веришь - попробуй мутировать vec, объявленный без mut. Система типов просто не позволит тебе получить мутабельную ссылку на внутренности контейнера через иммутабельную.
>>1884759 А зачем все переменные по дефолту иммутабельны? Ровно во за этим. Раз уж делается в языке упор на иммутабельность, то и добавили бы для коллекций иммутабельные операции. А так получается коллекции без mut практически бесполезные, с ними ничего толком не сделать. Это как если бы у целочисленных переменные убрать оператор + и оставить только +=. Та же самая картина была бы
>>1884821 Ты попутал с кложурой или хаскелом. Упор делает не на иммутабельность, а на контроль над тем кто может мутировать данные, а кто нет. И за отслеживанием того, кто и когда владеет объектом. И конечно же перформанс.
>>1884828 Потому что есть опыт с++, где все переменные по дефолту мутабельные и когда народ догнал что большая часть данных как раз таки не должна меняться, оно превратилось в const foo(const) const. Короче, по дефолту ты получаешь минимум возможностей, но если тебе прям точно нужна мутабельность, ты можешь ее попросить.
>>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.
>>1884822 А, понял. Нет, этого в стандартной либе нет и, скорее всего, не будет. Кмк, это связано методом управления памятью - без сборщика мусора трудно переиспользовать старые значения, а значит, хардкорная функциональщина будет тормозить за счет постоянного выделения-освобождения памяти. Крейт im и тому подобные в помощь.
>>1885119 Возьми cargo-bloat и посмотри, что понапихали. Я вот посмотрел и увидел, что даже без извращений с размером кода всё ок.
У хеллоуворлда (280КиБ) - https://pastebin.com/7q1f53gZ - большая часть жира из-за обработчика крашей, он тянет за собой печать бэктрейса и полный набор форматтеров текста. Сейчас в расте что-то сломали и убрать его нельзя.
Кроме того, если уж сравниваешь раст с плюсами, то не забывай, что у плюсов стандартная библиотека обычно линкуется динамически. Включишь статическую линковку - плюсы выдадут тебе 1,8МиБ отборного говна - https://pastebin.com/cYCt8rvN. Даже чистый C сейчас выдает по 700КиБ кода.
Кмк, ни то, ни другое сейчас не важно. Вот Swift for linux, который тебе из ничего сделает 30МБ бинарник - это пиздец.
Если и следует о чем-то беспокоиться, так это о скорости сборки - с ней всё плохо :(
>>1885154 >>1885188 > Да ты охуел? У плюсов она в 50 килобайт поместится у плюсов 1-1,5mb в зависимости от платформы: на ведроиде ~1, на винде ~1,5 >>1885211 я же не в том ключе сравниваю. Я лишь хотел узнать, что там раздуло либу до 3,5 и нельзя ли отключать ненужные в проекте часте, а не так, что отрубать прямо все и сразу типа no_std просто подумал, что может там модульная структура и можно не тянуть все, а только нужные модули
>>1885227 Ну я и пишу - не гадай, а сразу взвесь жир при помощи cargo-bloat. Ненужные части и так не должны попадать в код - они удаляются при включенном lto (обработчик крашей - редкое исключение).
Когда ты с помощью валгринда и гдб находишь причину сегфолтов в unsafe rust коде, передача указателя на значение со стэка в си код, который должен потом освободить память размером указанным в том значении, и в качестве эксперимента пробуешь поместить значение в бокс и все вроде работает, сообщаешь об этом автору, а он просит тебя сделать ревью его коммита, основанного на твоих экспериментах. Вот только я пишу на скриптоязыках, а не на этих ваших растах и си.
Man, do I look to you like I know what am I doing?
Аноны, такая петрушка: юзаю 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() - ничего не помогает.
>>1896677 Хз, надо тестовый крейт замутить. Вообще, работает нон параллельно, но в одном потоке - как будто rayon с какого-то перепугу решил заюзать треды от tokio.
>>1896899 >>1896610 Ёпта, и правда, дело было в асинхронности. Унёс все асинхронные функции вообще в отдельный бинарь (там из асинхронного было только обращение к сети за данными, которые, один хер, кешировались). И теперь совсем другое дело, все ядра в работе. Ну, это подстава, пиздос. По-хорошему надо бы разобраться, сделать тестовый сэмпл, и багулю зарепортить, а мне лень.
Если бытиё поражённого ржавчиной не производит естество одного из лучших современных языков программирования то почему он является милым и прошедшим валидацию
>>1898121 Бля, у меня, походу, очень сложный кейс. Эта самая rayon'ная многопоточность запускается в цикле, дак вот: на первой итерации все 8/16 забиты под завязку, но на последующих - вроде бы и куча потоков реально запущена (top -H их отображает), но при этом все они прибиты к одному ядру (спасибо, что не к логическому). Хоть 12 потоков, хоть 32 - одинаково.
Чет читал раздел про разделение проекта на файлы. Столько воды написано, что раза с 2-3 понял только, хотя там 90% можно выкинуть и всё будет элементарно.
>>1901851 - Ты функциональщик! - прокричал Сергей на весь оупен-спейс-рум номер 14. Комната притихла в ожидании развязки. — Я видел, как ты вчера вечером каррировал и декаррировал прямо за рабочим компьютером! Неодобрительный ропот и возгласы удивления прокатились по комнате. Кто-то громким шепотом сказал “какой ужас, а я с ним за руку здоровался”. — Знаешь что, Сергей, — сказал Денис, вставая из-за рабочего стола, — любой нормальный мужчина, если у него всё в порядке, может позволить себе позаниматься функциональным программированием. Это естественно. Каждый хотя бы раз, да пробовал. Зачем только об этом кричать на всю комнату? Я же не кричу, что ты объектно-ориентированный! Девушки захихикали, кто-то снова громко пробормотал “ну надо же, а по нему и не скажешь”. Присутствовавший при этом Игорь Матвеевич сильнее вжался в кресло. Только бы никто не узнал про его процедурные наклонности!
Наверное тупой вопрос: а почему закомментированная строка приводит к ошибке? ведь a и b это ж ссылки? Почему их нельзя в данном случае деструктурировать в шаблоне?
В принципе у меня скорее вопрос философский архитектурный, какими соображениями создатели itertools руководствовались когда так сделали? Херня ж по-моему какая-то получилась, или я что-то упускаю?
Прочитал недавно статью на хабре от лаборанта о ржавении. Вы, наверное, видели. Несмотря на то, что лаборант профан в сфере разработки, пара фраз о расте меня заинтересовала Поэтому хотел бы задать пару вопросов: 1. Пишете ли вы на расте энтерпрайз бд, бизнес-логика и прочая залупа? 2. В каком состоянии гуй фреймворки? 3. Какова ваша средняя скорость написания кода на расте по сравнению с той же явой/дотнетом/etc? 4. Как вам тулинг по субъективным ощущениям?
Пишу без агрессии. Насчёт лаборанта не обессудьте, но когда пчел поднимает кластер EKS для базы в 250 мб с приростом 50 мб в год, и жалуется, что 32 Гб оперативки и 24 ядра пришлось потратить – это пушка
>>1917129 1 не по работе 2 плохо 3 лучше, но изредка может вылезти какой-нибудь заёб 4 заебца
> наверное, видели Не. Пойду почитаю.
> EKS для базы в 250 мб с приростом 50 мб в год, и жалуется, что 32 Гб оперативки и 24 ядра пришлось потратить Звучит как ошибка в ДНК которую никаким языком не исправить.
>>1917129 1. По работе 2. wasm збс, кроме готовых компонентов. Сервер збс 3. Скорость может быть меньше, но зато время дебага на порядок меньше. 4. rust-analyzer жрет гигабайты памяти, lsp днище, в целом терпимо
>>1917129 >3. Какова ваша средняя скорость написания кода на расте по сравнению с той же явой/дотнетом/etc? > Недавно ради интереса переписал один скрипт на Питоне, где много операций типа "достать строку из xml и преобразовать по шаблону". За исключением того, что изначальный скрипт написан психопатом, получилось довольно прикольно. И заработало с первого раза.
>>1917129 1. Писал блокчейн. Считается? 2. Есть биндинги к win api, gtk и другой залупе, свои фреймворки в зачаточном состоянии 3. От задачи и выбора инструментов зависит, так-то Rust абстракции выразительнее, но думать надо больше. 4. Компилятор хороший-удобный, всё остальное не очень
>>1922358 Моё мнение что всё это в принципе плохо ложится, неудобно писать на Rust GUI, по крайней мере с теми абстракциями что дали. Но люди что-то пишут, что-то работает.
Котаны, подскажите ответ на нубский вопрос. Допустим есть такая конструкция `let tcp = TcpStream::connect(&addr).unwrap();` каким образом мне обработать ошибку резолва домена? Я в расте ни бум-бум.
Заодно подскажите как вырезать дебаг, 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
>>1924337 если ты опущ, неспособный понять принципы языка, это не значит, что язык говно для начала, нахуя тебе глобальная переменная? в расте для этого юзается static с lazy_static / thread_local, шобэ было потокобезопасно хочешь mut static - только через ансейф, ибо компиль не ебёт, будешь ли ты в будущем изменять глобальное состояние (что уже само по себе почти антипаттерн)
>>1924409 > error[E0133]: use of mutable static is unsafe and requires unsafe function or block Тебе прямым текстом говорят что ты делаешь хуйню и что нужно сделать если ты сегодня первый день.
>>1926876 1. Нет библиотек, хуевая инфраструктура 2. Дебильный менталитет у комьюнити, вечно все поломано и нихуя не работает 3. Хуевый компилятор, сборка проекта полдня 4. Слишком мало бабла инвестировано 5. Мало разработчиков 6. ??? 7. Джава ЕЕ бой!
>>1926876 Чтобы что? Для энтерпрайза нужен максимально простой язык, которому можно обучить любого дебила, энтерпрайзу в целом похуй на перформанс и главное — сроки. Зачем там руст?
>>1927435 Ну вдруг стартап в космической отрасли зарубежом для которой тебе придется иметь 100500 лет опыта, гражданство США/Европкосоюза, знание С++/АСМа/Верилога для галочки и прочие прелести за зарплату реакт-фронтэндера
Но вообще, ты ёбобо, которое потом будет орать что раст хуйня, потому что баги какие-то неуловимые, ведь ты не хотел падать на подстеленную разработчиками соломку сейф раста, а полез в ансейф раст, не понимая всех тонкостей UB и того, почему абстрактная машина раста и реальные процессорные команды — это разные вещи.
>>1930388 Мог бы еще прийти в хаскель тред и сказать: - Так, ебана, как у вас тут сделать глобальную мутабельную переменную? Какие монады-шмонады? Как мне разыменовать указатель ебана.
Embark Studios - компания мечты. Большая часть сотрудников транс и лгбт-персоны. Пишут графику игры на Rust. Пишут графику и шейдеры на Rust. Поддерживают BLM. Как бы я хотел бы попасть к ним. Почему я не живу в Швеции?
Всем шалом в этом чате. Я к вам пришёл из Go, меня интересуют веб-фреймворки на расте по типу gin-gonic/beego/iris. Есть что-то похожее на растишке? Мне нужны удобства в рендеринге шаблонов, удобная работа с формами, авторизацией. Что посоветуете, уважаемые?
Приветствую, ржавоебов. Объясните в чем смысл языка. Искал себе какой-то язык для души, чтобы по кайфу что-то писать. Попробовал хаскель, очень круто, но как-то сильно заебисто, много сомнительных моментов, таких как отсутствие скобок, везде тайп классы, инкапсуляций и методов нет.
Поэтому решил посмотреть раст. С чего можно начать изучение? Может есть книги и тд. Я начал с онлайн книги на офф сайте, но она очень нудная, прям для очень начинающих.
>Объясните в чем смысл языка Смысл языка в инклюзивности и нулевых абстракциях без утечек памяти в сейф моде. Язык для системников ака байтоёбов. Всех других от него рано или поздно начинает тошнить.
>>1938572 В trpl читай только главы про лайфтаймы\трейты\обработку ошибок и т.п., вместо вводных глав и прочей хуйни пробегись по rust by example + rustlings. Потом читай embedded book, ну или что ты там хочешь делать. Местных не слушай, тут одни хуесосы сидят (как всегда).
>>1944008 >Это как раньше были какие-то мини-юбки или татухи. >>1944021 >качкобабах >качкожопы Причём тут качкобабы и качкожопы? Это не мода и не сиеминутное решение, которое можно откатить. Это выбор человека и их нужно в этом поддерживать. Это если про лирику.
А если по существу: khyperia охуенная, rust-gpu охуенный (это реально прорыв и возможно будущее геймдева), holmes охуенная (посмотрик какие полезные ролики она мутит на ютубе). Поэтому все трансфобы и прочие дегенераты идут лесом.
>>1944026 На женщине не должно быть мужской одежды, и мужчина не должен одеваться в женское платье, ибо мерзок пред Господом, Богом твоим, всякий, делающий сие.
>>1944057 Перевод хороший. Можно спорить о не совсем точно переданной стилистике, но суть и смысл библейского текста переданы верно. Текст на древнееврейском можешь посмотреть здесь: https://www.mechon-mamre.org/p/pt/pt0522.htm
>>1944087 Если у тебя в силу того, что ты окружил себя технологиями, отсутствуют убеждения и принципы, либо ты их имплицитно воспринял от своего окружения в качестве "актуальных", то это не значит, что другие такие же.
Не бывает 100% хороших (кроме Христа) или 100% плохих людей. Люди разные. Программисты-транссексуалы делают много хороших вещей. Они придумывают классные технологические решения, облегчают работу людям, двигают технический прогресс. Но их выбор в плане ориентации или гендера - это искажение человеческой природы девиациями. Ненавидеть или кэнселить этих людей - это плохо. Ненавидеть надо грех, а не людей. Любой человек прекрасен как замысел Божий, плохо лишь увлечение противоестественными разрушительными вещами. И говорить, что хорошо, а что плохо, обсуждать, спорить, это нормально.
>>1944144 > либо ты их имплицитно воспринял от своего окружения в качестве "актуальных" Ну а ты конечно же свои принципы и убеждения сформировал сам в глубокой медитации и разговоре с абсолютом, и библия с христианами тут совсем не причём, да? А главное свято уверовал, что если мужик надел платье, то у него ни принципов, ни души, ни сердца, и его нужно сжечь на костре.
>>1944169 Лучше всего забить на это хер, не оценивать, ни плохо ни хорошо. У трансгендеров почти всегда нет детей, они никогда не станут большинством, скорее будут в роли малочисленного генетического шума.
> противоестественными разрушительными вещами
Люди курят, бухают, дрочат, сосут члены, обжираются, смотрят кинцо, в том числе аморальное, играют в игоры, в том числе с жестокостью, ходят в казино, делают ставки, хулиганят, совершают тысячи разных преступлений. Но всё внимание получают мужики на гормонах в юбках. Это похоже на латентную гомосексуальность, подумай об этом.
>>1944218 >то у него ни принципов, ни души, ни сердца, и его нужно сжечь на костре Где ты это увидел? Ты пытаешься возразить ценностному суждению: транссексуальность это неестественно и плохо. Какие костры? Я не испытываю ненависти к людям, говоря, что они делают что-то неправильно.
Если абстрагироваться от конкретных людей, то в целом тенденция нездоровая еще и по той причине, что ее финансово подпитывают фармацевтические корпорации. А у людей потом здоровье рушится из-за решения "сменить пол" и сидеть на препаратах.
>У трансгендеров почти всегда нет детей Чем больше таких людей, тем хуже для общества. Опять же, без ненависти к ним. Люди, которые создают нормальные семьи и заводят детей, обычно думают о будущем, делают разумные инвестиции, поддерживают стабильность в обществе, в котором живут. ЛГБТ-пары зачастую живут одним днем, у них редко бывают дети, стало быть, они безразличны к будущему и к среде, в которой находятся.
С экономической точки зрения разумнее жить в обществе, где традиционные ценности стимулируют людей заботиться о себе, свои детях и обществе в целом. Алсо еще Макс Вебер показал важность христианской трудовой этики для капитализма, так что есть много аргументов в пользу того, что верующие семейные люди создают стабильное и успешное общество.
>Но всё внимание получают мужики на гормонах в юбках Не вижу, чтобы им уделялось сколь либо большое внимание. У тебя какой-то свой информационный пузырь, выходи из дома хоть иногда.
>>1944287 >Чем больше таких людей, тем хуже для общества Этих людей мало, просто они бросаются в глаза. Где я эти фотки взял есть ещё 60+ человек, но если бы я постил их фото, то у тебя скорее всего возник вопрос - что это за ноунеймы? Но именно на трансов у тебя встал и ты начал рассказывать про будущее общества.
>Люди, которые создают нормальные семьи и заводят детей, обычно думают о будущем Окей, сейчас наша медицина в говне. Если завтра какой-нибудь мужчина сменив пол сможет рожать детей и не будет испытывать проблем с здоровьем - это изменит твою позицию? И почему? Ещё 50 лет назад трансы могли разве что переодется в женщину, аля Верка Сердючка. Сегодня они могут полностью преобразить свою внешность до неузнаваемости. Завтра они будут рожать детей как и обычные женщины.
>важность христианской трудовой этики для капитализма, так что есть много аргументов в пользу того, что верующие семейные люди создают стабильное и успешное общество. Я согласен с этим, но проблема в том, что именно капиталистическое общество рушит современный институт семьи и позволяет существовать трансам. Капитализм и любые религиозные принципы - несовместимы.
>чтобы им уделялось сколь либо большое внимание Ой. А как это сочетается с 4 абзацами текста от тебя про неестественность трансгендеров?
>>1944359 >Ой. А как это сочетается с 4 абзацами текста от тебя про неестественность трансгендеров? В треде зашел разговор эту тему, я запостил цитату, отражающую мое мнение, мне сказали, что это мнение средневековое и "так нельзя", в ответ я подробно изложил свою позицию. Все. Больше нечего добавить.
>>1944467 Раст это больше чем язык программирования. Это революция, это протест. Тут не бывает оффтопа. В прошлых тредах мы обсуждали политику, железо, другие языки, игры, геймдев...
>>1944359 > Ещё 50 лет назад трансы могли разве что переодется в женщину, аля Верка Сердючка. Сегодня они могут полностью преобразить свою внешность до неузнаваемости. Завтра они будут рожать детей как и обычные женщины. Да нихуя. Что тогда, что сейчас, если начнешь пить таблетки в подростковом возрасте, то станешь няшей, а если тебе в 30 стрельнет в голову, что ты женщина, то станешь мужиком в юбке.
По технологиям вообще ничего не поменялось, разве что пластика немного улучшилась. Но ее то все равно могут позволить далеко не многие, да и ложиться под нож такое себе удовольствие. а искустаенные пезды так и не научились делать, вместо них гниющая рана из которой воняет говном
не думал что буду писать про трапов в треде про язык программирования
>>1944633 Применятся гормональная терапия (и соответственно массово тестироваться начала только в 80-90х годах). В том числе это совпало с изменением юридического статуса трансов и лгбт. Чтоб сегодня в подростком возрасте ты мог стать няшей - мужики по всему миру из под полы юзали гормоны почти 100 лет.
Про пластику вообще не стоит и говорить. До нулевых даже силиконовые сиськи выглядили как надутые шары (если ретро порнуху смотрел то понимаешь). Сейчас ты на глаз едва-едва сможешь определить. Больше опыта накопилось в ринопластике, в лицевой хирургии, куча косметических операций. Та же вагинопластика в более-менее адекватном виде появилась только в конце 90х/начале 00х, до этого были по сути подопытные кролики.
50 лет назад гомосексуализм считался психическим расстройством по МКБ, на секундочку. Про трансов молчу. Тебе не гормоны, тебе галоперидол могли всерьёз выписать.
И это инженеры? Говно какое-то, пидоры, блядь. Родина им дала доску — обсуждай! Обсуждай Rust, блядь! Не хочу, хочу жрать говно и на членодевок дрочить! Что такое? Это /pr/?! Это тематика?! Суки… Мудачьё — программисты. В тред зашли, говно жрут — пидоры, блядь, ёбаные…
> А у людей потом здоровье рушится из-за решения "сменить пол" и сидеть на препаратах.
Не переживай за чужое здоровье. Они знают на что идут, я спрашивал.
> ЛГБТ-пары зачастую живут одним днем, они безразличны к будущему и к среде
Традиционные семейные пары не семи пядей во лбу, и подавляющее большинство живёт от получки до получки, потому что планировать что-то без денег бессмысленно. Почему ты решил что именно ЛГБТ живут одним днём? Представь, эти гормоны, операции, сколько это денег и дисциплины.
> С экономической точки зрения
Говорят, геи вполне платёжеспособны, не просто на уровне, а даже выше среднего.
> Не вижу, чтобы им уделялось сколь либо большое внимание.
Я конкретно про тебя. Зачем ты пришёл ITT читать проповеди с выдержками из библии? У нас тут инклюзивность и членодевки с неграми и девственниками в контрибьюторах, и мы не суд нравственности.
>>1944989 >и мы не суд нравственности Тогда не указывай людям, за кого им можно переживать, а за кого нет, и кому что высказывать. Иначе ты сам себе противоречишь.
>>1945071 Есть жизнь внутри комьюнити, есть жизнь вне комьюнити. Внутри мы дружные зайки и все друг друга любим и уважаем. А вовне можешь хоть человечину жрать на завтрак. Главное правило — не суди за жизнь вне комьюнити. То есть, христианство, семейные ценности — да пожалуйста, неплохой выбор, и в целом это не моё дело как ты живёшь у себя дома.
>>1945128 >Есть жизнь внутри комьюнити, есть жизнь вне комьюнити Во-первых, это разделение иллюзорно, ты не сможешь провести четкую грань, где комьюнити заканчивается и начинается "жизнь вне".
Во-вторых, даже если рассматривать ситуацию в рамках этого условного разделения, люди заявляют о своих сексуальных предпочтениях внутри самого комьюнити, давая окружающим знать о своей личной жизни и рассчитывая на поддержку. А люди вправе не поддержать их и высказать свое мнение об этом. В ответ люди вроде тебя вправе высказать свое мнение.
>>1944287 >Чем больше таких людей, тем хуже для общества. Да, но чем больше люди размножаются, тем хуже для текущего состояния человечества. Мы до сих пор не озеленили Марс, а количество мешков с мясом, которое может поддерживать Земля скоро пересечёт критическую отметку. Выбирая между группой сознательно — или не очень сознательно — отказавшихся от размножения людей, децимацией всего человечества, или вымиранием человечества, лично я голосую за первое.
>>1945216 Проблема в растущих запросах людей на потребление. Даже если бы население Земли составляло всего один миллиард, то с ростом потребления они бы все равно смогли эпично растратить все ресурсы планеты.
Без повсеместного распространения разумной этики потребления бессмысленно заботиться о перенаселении. Ты можешь не заводить детей, но тратить столько же ресурсов, сколько тратит скромная многодетная семья. В идеале ты бы мог отказаться от использования автомобилей, самолетов, компьютеров, электричества, жить за счет выращиваемых в собственном огороде овощей и фруктов и т. д. Но не отказываешься же наверное. У тебя мотивации мало для этого, как и для того, чтобы бросить усилия на программу освоения Марса.
Кстати у нас, христиан, есть представление о cultural mandate, о разумном использовании мира, который дан Богом, поэтому нас эта тема тоже беспокоит. Но отказ от воспроизводства не вариант, потому что Бог заповедал верующим плодиться и размножаться, стало быть, пусть будет больше рационально мыслящих религиозных людей которые помогут (в идеале должны помочь) остальным.
>>1945301 >>1945216 О чем вы вообще? Мы пищи производим в три раза больше, чем нужно. Проблема не в потреблении, проблема в перепроизводстве и неэффективном распоряжении ресурсами.
>>1944287 Вебер жил в протестантском обществе емнип, а у протестантов своя этика, отличная даже от католической.
Что же касается этики - лол, с такой точки зрения лучше всего обществу подходят марксизм или национализм, они в принципе построены вокруг социально-эволюционно выгодного коллективизма. Но если все мерить заботой о будущем и общем, то лучше вообще вводить человейник и бургундскую систему сразу.
>>1945216 >которое может поддерживать Земля скоро пересечёт критическую отметку Так говорят уже лет 100 с чем-то. За это время население увеличилось в несколько раз.
>>1945400 >Вебер жил в протестантском обществе емнип, а у протестантов своя этика, отличная даже от католической. В этике протестантов была как общехристианская часть, так и непосредственно протестантские установки. Профиты, которые получил мир от Реформации, это понимание, что возможна мирская аскеза - честный труд и отсутствие стремления к роскоши. Такое экономическое поведение позволило людям накапливать финансовый капитал, а потом инвестировать его во благо общества. В православии это тоже возможно, в качестве примера можно вспомнить старообрядческих предпринимателей в Российской Империи.
>лучше всего обществу подходят марксизм или национализм Это путь к тоталитаризму. Христианские ценности подразумевают индивидуализм и добровольность. Каждый отвечает за себя и трудится на совесть, понимая, что ему надо не трудодни отработать, а выполнить свою работу качественно и без халтуры. Мотивация тут одна - у тебя есть жизненное призвание, данное тебе Богом, и Бог видит твой труд.
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.
>>1945466 >Такое экономическое поведение позволило людям накапливать финансовый капитал, а потом инвестировать его во благо общества. Упускается тот факт, что без колониализма всего бы этого не было. В Китае конфликт между знатью и богатыми, без которого невозможно зарождение капитализма, начался еще во времена Конфуция и Шана Яна, но капитализм не зародился. Не было условий для этого.
>Христианские ценности подразумевают индивидуализм Христианские ценности что только не подразумевают, и как их только на глобус не натягивали. Какбэ сравни свое понимание, христианских социалистов, крестоносцев какую-нибудь обскурную ветвь вроде мессалианцев (которые считали, что Бог познается через чувственные удовольствия, а труд - грех и им должны заниматься рабы) и Милонова какого-нибудь. Все эти граждане искренне считают, что действуют в духе тру-христианства.
>>1945599 >Упускается тот факт, что без колониализма всего бы этого не было Согласен, это повлияло на развитие капитализма. Но у тех же старообрядцев и без колониализма взлетело. Даже в условиях гонений.
>Все эти граждане искренне считают, что действуют в духе тру-христианства Пусть считают. В Писании сказано: "по плодам их узнаете их". Не вижу каких-то годных результатов у христианских социалистов. Насильственный отъем частной собственности и присвоение чужого считаю преступлением, так что считаю, что последовательный социализм вряд ли может быть христианским.
Я за минимальное государство по Нозику и за создание частных благотворительных фондов, которые будут помогать нуждающимся и обустраивать общество по мере возможности. Если какие-то общины христиан хотят иметь общее имущество, то без проблем, пускай создают такие общины, но на добровольной основе. Как гуттериты, например.
>>1945618 >Но у тех же старообрядцев и без колониализма взлетело. Настолько взлетело, что капитализма в РИ так и не построили по факту, лишь в последние лет 50 какие-то зачатки появились.
Ну и не будем забывать, в руках какой национальности (а следовательно религии) находится большая часть крупного капитала.
>Насильственный отъем частной собственности и присвоение чужого А социалист (даже не христианский) скажет тебе, что это капиталист присваивает себе чужой труд, а рабочий трудится на него, потому что ему нужен жрат. То есть с точки зрения соци как раз капиталист бака и бяка. Не все так однозначно.
Да и Спаситель вполне себе устроил погром в храме, нанеся существенный экономический ущерб честным торгашам внутри.
>Я за минимальное государство по Нозику Государство - это дракон, который существует, чтобы новые драконы не появлялись. Собсно, общество потребления тому пример - утопи золотой миллиард в гедонизме и удовлетворении любых прихотей, чтобы рыночек продолжал крутится. Как я уже говорил, мы пищи в три раза больше необходимого производим, а у нас в Африке голод - просто потому что выкинуть пищу рентабельнее, чем везти в Африку и раздавать там.
Оговорюсь, что не соци и не рыночник, разочаровался в идеологиях в принципе. То же самое и с религией - был православным, теперь... нечто иное.
>>1945714 А ничего. Тут хрестьянин сверху распинался, что свобода, Боженька и рынок все организуют - ан нет, у нас жуткий перерасход ресурсов и их нехватка при избытке (!!!). Иногда мне всерьез начинает казаться, что концлагерь - лучший способ организации человечества.
>>1945731 Ну, по статистике ООН у нас миллиард человек голодает, так-то. Опять же, не вся Африка голодает, и не все африканцы размножают как кролики; в Индии примерно такая же шняга.
А то, что еды сильно больше, чем нам нужно - это тоже факт, в Америке же даже целое движение есть, которое питается чисто за счет выкинутой за ненадобностью пригодной пищей. Просто в России за счет менталитета и меньшего достатка подобное принимает не такой лютый характер (хотя вспомни начало санкций, лол).
>>1945733 > в Америке же даже целое движение есть, которое питается чисто за счет выкинутой за ненадобностью пригодной пищей В мурике просто сумасшедших изолировать не принято, лол.
>>1945788 А ты подумай - что в этом такого, если не отталкиваться от нашего менталитета? Еда - вполне свежая, бесплатная, на любой вкус, в упаковке. Ее просто не успеют продать, а потому обычно держат на заднем дворе пару дней как раз для таких ребят, хотя с ними пытаются бороться - если ты ешь нахаляву, ты не создаешь спроса.
>>1945795 В США в каждом супермаркете стоит пресс для уничтожения просроченных продуктов. Просто потому что если кто-то траванется едой из супермаркета, даже выброшенной, то есть риск судебных исков.
Поэтому чтобы найти просрочку в США я даже не знаю как надо извернуться и в какие помойки залезть.
Пиздос. Индексы в массивах только usize, нельзя складывать usize и isize, но при этом можно вычитать usize из usize. В итоге делаю странное, чтобы всё было usize:
>>1947523 Раст норм, не обращай внимания на тролля. Просто в треде завели ненужные споры про личную жизнь контрибьюторов, а потом вообще ушли в обсуждение религии и политики.
>>1947560 Но если контрибьюторы пидоры/ЛГБТ шавки, то выходит что Раст зашкваренный язык от выебанных петухов в жопу, не? Ровным пацанам его юзать нельзя получается.
>>1947425 Можно, если превратить usize в isize, а потом обратно. Но то, что индексы только usize — это охуенно на самом деле, решает целую кучу проблем. index = (index as isize + index_add + index_sub) as usize;
>>1948259 >ГАЙД НА ПОЛТОРА ЧАСА КАК СПЛИТИТЬ СТРОКИ Это не гайд - это по сути стрим, где челик тупо включил камеру и начал вещать. Вот тебе лекция на полтора часа по плюсам: https://www.youtube.com/watch?v=JGu-4McXVok
>C++ СЛИШКОМ СЛОЖНЫЙ, НАМ НУЖЕН ЯЗЫК ПОПРОЩЕ Сам выдумал хуйню и сам её "опровергаешь"?
>>1948358 >Это не гайд - это по сути стрим, где челик тупо включил камеру и начал вещать. Окей гайд не может быть в виде стрима. >Вот тебе лекция на полтора часа по плюсам: >класс String Во первых это не лекция, а по сути стрим, челик просто включил камеру и начал вещать, во вторых это про String, а не &str.
Туплю. Есть некая сторона куба, допустим 10, она в константе. Мне нужно в другой константе иметь максимальное расстояние которое можно пролететь внутри куба, что есть стандартное евклидово расстояние от угла до угла, sqrt(3xx) ~ 17.32. Но я у мамы перфекционист, и хочу считать всё абсолютно без float и без сторонних пакетов, и меня устроит любое целое число больше 18, и допустим меньше 40, посчитанное некоторым приближением из 10. Как быть?
>>1951119 Нет, у раста самое приветливое коммьюнити из языков программирования. Да, обосрём, потому что ты не прочитал растбук. А если прочитал, то у тебя не будет совсем дебильных вопросов.
>>1951153 >А если прочитал, то у тебя не будет совсем дебильных вопросов. Здесь ты не прав, киддо. Я ведь не уточнял, что дебильные вопросы будут касаться раста а не ООП
Вопрос от потенциального вкатуна в раст, слегка осматриваюсь, пытаюсь понять всякие синтаксические плюшки и все такое и первое, что прямо бросается в глаза: Возможность опускать return Last statement еще куда не шло, но в середине функции, с несколькими возможными return (без самого return)? Это выглядит очень неочевидно и проглядывает возможность допустить ту же ошибку, которую люди допускали в плюсах, написав вот так: while (hui = pizda) (очевидно поставив = вместо ==)
>>1954097 > Возможность опускать return В отличии от паскаля с "процедурами" и "функциями", в расте все функции всегда возвращают какое-то значение. Часто это значение () типа (). За счет синтаксического сахара ты можешь его не указывать явно: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=8686c254e8498adbfd33ef63ab40f3f1 foo и бар отличаются только наличием сахара. Точка с запятой по сути позволяет выкинуть нахуй текущее значение и превратить его в ()
>>1947575 Представь себе, ЛГБТ-пидоры дышат тем же воздухом, что и ты, так что ты автоматически зашкварен, т.к. делаешь то же самое, что и эти мерзкие пидорасы. Чтобы остаться ровным пацаном, тебе прямо сейчас нужно задержать дыхание и перестать дышать до тех пор, пока ты не задохнешься и не обмякнешь под себя.
Есть задача, написать на расте что-то типа конфигурируемого движка workflow. Есть ряд обработчиков, у обработчиков есть данные на входе и выходе. Задача - описывать порядок выполнения этих обработчиков в текстовом файле, чтобы можно было выполнять разные наборы в разном порядке без перекомпиляции программы. Пока не понимаю, можно ли это вообще сделать на расте, и если да - то как. Может, у кого-то будут советы, в какую сторону копать.
Мне надо десериализовать это в нужные обработчики, запустить в нужном порядке и подать на вход нужные данные, желательно проверив перед этим совместимость типов, и если тип не совпадает, то выводить ошибку. И вот тут у меня ступор, в расте ведь нет рефлексии, можно ли как-то реализовать такое, или лучше смотреть в сторону более динамических языков?
>>1954097 Дело в том что в расте if, match это выражения (expressions), у которых есть результат. Даже если они многострочные. Это не statements как ты привык. То есть там не проставляется неявный ретурн, а всё так же просто возвращается результат последнего expression, даже если это ветвистый match на 300 строк.
>>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); }
>>1954528 Что ты хочешь услышать? Почему тебе стоит продолжать писать на плюсах в 2021? Пиши, разрешаю. С киллер-аппом немного таки беда, это правда, но кому сегодня нужен киллер-апп? От того что линукс и постгрес написаны на си, полмира не бежит делать свои проекты на си.
>>1955332 Выглядит как линейная цепочка if | else if | else, которая тоже одно единственное выражение.
if { ....раз ....два ....три ....true // возможный результат цепочки if } else if { ....раз ....два ....три ....false // возможный результат цепочки if } else { ....раз ....два ....три ....true // возможный результат цепочки if }
Но если тебе проще где-то использовать return, нет ничего плохого чтобы таки использовать return.
>>1954097 Забавно что никто из ответивших не упомнул что любой блок - {} в расте - это выражение, а значит возвращает результат: let expr = {}; expr = 1; // error, as {} returns ()
Есть ли нормальный автокомплит в IDE/IDE с нормальным автокомплитом для сабжа? Пытаюсь писать на расте в vscode со стандартным плагином, вообще не то пальто. Я хочу чтобы все возможные варианты работы с объектом мне показывались в менюшке, как это в плагине к Go.
>>1958032 У меня растущее фулстек приложение на 20k/3k строк и 10 гигов оперативы сжираются в никуда. Боюсь представить что происходит с проектами побольше.
>>1958053 Если его на написать на нормальном расте он тоже будет летать. Моя гипотеза - жава головного мозга у автора. Люди с жава бэкграундом привыкли жрать говно и что софт тормозит и жрет гигабайты памяти.
>>1958159 Мне кстати rls по прежнему нравится больше. Да, он чаще не может справится с поставленой задачей, но пока я пользовался им, у меня не кончалась память на не самой слабой машине и не висло все к хуям, потому что компьютер пытается взлетать и отправится на марс на кулере.
>>1958023 >Нужно сделать Open Folder. По-русски можно? Я нагуглил проблемы на single file, can't find Cargo.toml Но у меня каталог прожекта создан cargo init my_app
А вообще, наверное, я не правильно выразился. Автокомплит работает по либе. Что-то типа std::fs::read_to_string комплитит, но не работает с my_string.retain. Я хз к чему это относится, я ньюфаженька в расте.
>>1958307 Блять, я так и сделал. Ладно, хрен с ним. Лучше скажите как рефакторнуть функции, если я подобавлял в начале имени нижнее подчёркивание чтобы оно не писало мне варнинги. Как сделать глобально #[allow(dead_code)] я не нашёл.
Листаю тур. Конкретно пример с 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 не было, то как бы их, вообще, можно было откопать?
>>1970130 Кажется, нашёл. Надо в списке Implementors, под пояснением про Err надо, в строчке с нужным тебе типом кликнуть не на i32, не на [src], не на любое другое место в строке, а на [+] слева. Тогда появится строчка type Err = ParseIntError В ней надо кликнуть на ParseIntError и там можно увидеть, что это структура std::num::ParseIntError её и нужно указывать в fn main() -> Result
>>1970130 непонял полотна ты парсишь строку и результатом идет енам резалт ок и ошибка и ошибка эта будет парс инта, так как ты парсишь инт, ты можешь ее обработать, вернуть в вызывающий код или просто выкинуть панику
>>1970277 >и ошибка и ошибка эта будет парс инта Ты так говоришь, будто легко угадать, что это ParseIntError, а не какой-нибудь ParseErrorInt, или NotIntError. Почему ни один из инструментов не может это подсказать? Ни компилятор ни clippy.
К тому же, даже если угадаешь базовое название, этого недостаточно, компилятор предлагает три варианта на выбор с одинаковым именем: core::num::ParseIntError pin_utils::core_reexport::num::ParseIntError std::num::ParseIntError какой я должен взять, и чем они отличаются?
Пишешь туда какой-нибудь тип (с другими вариантами не сработает), например 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, но как выбрать именно его, я всё ещё не понял.
>>1970393 это одна ошибка, просто std экспортирует ее из core, да и вообще все что есть в коре есть и в стд. то есть если не хочешь ссылатся на стандартную библиотеку/она недоступна по каким то причинам можешь ссылаться на ядро.
>>1970450 Спасибо, сейчас-то мне это понятно, но как быть, если там больше вариантов будет? Не только pin_utils::core_reexport::num::ParseIntError, а разные, и не будет, например ни core::, ни std::?
>>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 находим пикрелейтед.
>>1970450 да чтобы упредить вопрос а нахуя это надо. кор дизайнился для работы на низкоуровневой голом железе, фактически для ембедедщины и тд, она меньше и проще.
>>1970461 Пока не знаю, но если там написать вариант, например, Err, то предлагают anyhow::private core::result::Result futures_util::__private pin_utils::core_reexport::result::Result and 3 other candidates Тут тоже core есть, но std уже нет, так что предположу, что и кора тоже может не быть (или, как минимум, не предлагаться в открытых вариантах)
Ты говоришь, что кор будет обязательно? Хорошо, спасибо, запомню.
>>1970457 >но нас интересует файлик А как определить, какой файлик нас интересует, и, тем более, найти там строки 778-789? Спасибо, что помогаешь разобраться.
>>1970474 >std::result::Result тоже есть Да, но он не написан, поэтому без догматического знания, что "всё из core есть в std", я об этом не догадаюсь. А я хочу меньше догадываться и больше читать справку, которая мне пояснит, где я дурак.
>фома неверующий Я простой иван из города тверь, и я хочу разобраться. Готовый ответ уже был в примере.
>>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 строке.
>>1970579 ты знаешь 100% кодовой базы раста? все патчи проходят через тебя? я описал очевидному новичку общий принцип самостоятельного нахождения ответов на подобные вопросы, неважно, в std лежит код или в каком-то никому неизвестном крейте. что касается знаний, сегодня ты знаешь, завтра это поменяют, знания устареют.
>>1970617 если б проситель изначально знал знал что кор=стд этого вопроса даже не возникло бы, ибо все легко гуглится по интернет доке, тут вопрос изначально в этом был, а не где искать.
>>1970130 >а откуда появляется std::num::ParseIntError? >let b = a_string.parse::<i32>()?; Знак вопроса возвращает ошибку, если что-то пошло не так. Можно заменить на unwrap() и убрать Result из определения. >Каким образом я могу выяснить, что мне нужен именно этот метод(?) ParseIntError в num в std? Можешь поставить Box<dyn std::error::Error>> > Как выбрать нужную? f32 это у нас число? Значит num.
>>1972119 Дочитал. Я понял синтаксис, я не понял, как узнать, что std::error::Error это трейт (имплементацией которого для parse::<i32> является std::num::ParseIntError), который нужно туда засунуть?
>>1972142 Вот прос не в этом. Где прочитать, что std::num::ParseIntError — это имплементация std::error::Error, а не kern::oshibka::Mistake? В документации по ссылкам не написано.
>>1972176 Ещё раз, как по документации понять, какую ошибку она вернёт? Почему нужно лезть в главу учебника про обработку ошибок? Это что вообще за подход? Почему сигнатуры функции не достаточно, чтобы с ней работать?
>>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.
Раст сейчас чаще в вебе используют? Я где-то читал что писать какие-нибудь десктопные приложения пока что на нем не удобно. Правда ли это? Или все таки стоит начать его изучать. Пока что пишу на плюсах
>>1972256 >>type Err = ParseIntError Нет, это я уже нашёл, даже лучшим способом, без >Идем сюда: на рандомную страницу, а напрямую по ссылкам >>1970144
Теперь задача, как найти std::error::Error или сразу -> Result<(), Box<dyn std::error::Error>>
>>1972266 Box<dyn Error> значит поинтер на любой объект в куче, для которого существует имплементация трейта Error. Для типа ParseIntError такая имплементация есть
>>1972288 Да я уже даже нашёл, просто тот анон хвост распушил, книжку меня отправляет читать, а сам в документации прямой путь показать не может, только уже известное ему слово загуглить.
>>1972300 >Почему надо читать учебник по математике? Почему нельзя просто знать, что 1 + 1 = 2, и из этого сразу понять как быстро умножать и делить в столбик?
У раста охуенные доки, но это не совсем учебник. Ты первый раз видишь раст, но не читаешь учебник по расту. На сишке (или что ты там до раста учил) ты тоже сразу ебошил код, иногда заглядывая в std reference?
>>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), а не лезть в документацию.
>>1972884 Это один из тех людей, которые свято уверены, что по учебникам научиться программировать нельзя, и единственный способ это практика без понимания теории.
>>1972922 Не надо мне слова в рот класть, я ничего подобного не говорил. Я говорил, что в документации должно быть прописано, как пользоваться функцией. Чтобы не было такого, что тебя просят указать определённый тип, но нигде не пишут, что за тип и в зависимости отчего какой указывать. Чтобы не было >укажите тип >bool >не тот тип и нигде внятно не написано, какой тип тот
>>1972934 >Не надо мне слова в рот класть, я ничего подобного не говорил Да, не говорил, но твои действия говорят за тебя. Прочитай учебник и не выёбывайся.
>>1972911 Во-первых, ты проебался, потому что Pattern не тип, а трейт. Вот Err — это как раз associated type, и можно узнать конкретный тип, посмотрев реализацию трейта у нужного тебе типа. Ты никак не можешь подставить свой тип в Err, и тебе нахуй не надо знать какой там тип, если ты не хочешь обрабатывать ошибку. Но если ты хочешь обрабатывать ошибку, то ты уже знаешь какой там тип, иначе как ты нахуй обработаешь ошибку, если ты нихуя не знаешь про тип ошибки?
А если ты тупо вверх пробрасываешь, но ничего не делаешь с ошибкой, то ты не понимаешь, что ты делаешь.
>>1973006 >А если ты тупо вверх пробрасываешь, но ничего не делаешь с ошибкой, то ты не понимаешь, что ты делаешь. Но это же просто пример того, как фейлится main, если использовать fn()?; и получить ошибку. Мейны, которые могут завершиться с ошибкой не делают?
>>1973069 >Делают Тогда я не понял, к чему было >А если ты тупо вверх пробрасываешь, но ничего не делаешь с ошибкой, то ты не понимаешь, что ты делаешь.
>но с какого хуя документация к функции parse должна тебе рассказывать про глобальный функционал типа Box<Trait> Хотя бы просто про трейт std::error::Error. Про std::num::ParseIntError я же нашёл (вы даже с этим не справились), почему оттуда внятно ничего не ведёт?
>Вот если бы ты читал учебник У меня возникает ощущение, что вы читали только учебник и теперь пытаетесь доказывать, что отлично разбираетесь в очень удобных доках, при этом 3 не отвечая на простой вопрос, а рассказывая "ну иди другую книжку почитай, в документации к языку такого не пишут". Я хочу удобную документацию (и подсказки компилятора), а вы что-то хотите, кроме как унизить новичка, пытающегося в этой документации разобраться?
>>1973093 >Хотя бы просто про трейт std::error::Error Ты совсем тупой дегенерат? В расте over 9000 функций, которые возвращают Result<T,E>, ты предлагаешь к каждой из них давать ссылку на трейт, который может быть даже не реализован для E, просто потому что ты хочешь иметь учебник в доках, а не в учебнике?
Ещё раз для тупых и необучаемых: доки и учебник — это разные вещи. Специально покажу разницу между неудобными и удобными доками.
Неудобные:
Сложение — одна из основных бинарных математических операций двух аргументов, результатом которой является новое число, получаемое увеличением значения первого аргумента на значение второго аргумента.
Удобные:
Сложение (прибавление) — одна из основных бинарных математических операций (арифметических действий) двух аргументов (слагаемых), результатом которой является новое число (сумма), получаемое увеличением значения первого аргумента на значение второго аргумента.
С какого хуя тебе в сложении должны рассказать об умножении в столбик, животное?
Если бы ты прочитал описание Box<T>, ты бы узнал, что T: ?Sized. Но тебе это ничем не поможет, потому что ты недостаточно умён, чтобы зная только про 1+1=2 дойти до мнимых чисел, и точно так же ты недостаточно умён, чтобы понять, что если T: ?Sized, то можно сделать Bpx<Trait>. Так что не выёбывайся, а то заебал.
>>1973132 >С какого хуя тебе в сложении должны рассказать об умножении в столбик, животное? >С какого хуя тебе в std::num::ParseIntError должны рассказать об std::error::Error, животное? Понял твою мысль, спасибо.
>>1976444 Кошкодевочки все правильно сделали, Торвальдс, Столман, вся эта старая гвардия топят явно или неявно за меритократию и элитизм в мире софтостроения, а все прогрессивные девочки такое не любят, а любят свободу для всех, равенство, дайверсити и инклюзивити, что полностью противоречит фашистской меритократии белых бумеров-диктаторов из прошлого столетия.
>>1977047 В расте просто можно создавать переменные с одинаковыми названиями в одной области видимости. При этом первая переменная становится недоступной после объявления второй. При этом у каждой переменной есть свой собственный тип.
В языках с динамической типизацией можно делать так:
>>1977224 Не знаю. Объясню еще раз: let x = ...; создает новую переменную x, с новым типом. Просто x = ...; присваивает значение существующей переменной. У единожды созданной переменной тип изменить нельзя. В языках с динамической типизацией - можно. В расте присвоить переменной значение другого типа нельзя, но можно создать новую переменную с другим типом, с тем же названием. Но это будет уже не та переменная.
>>1977251 Это я понимаю анон. В одном случае мы старой переменной присвоили новый тип, в другом дропнули её и создали с тем же именем но другим типом. В чём существенная разница?
>>1977304 Существенная разница в том что в динамических языках тип таскается в памяти в рантайме. Поэтому ты делаешь проверку типа в рантайме. В случае с растом этой инфы в рантайме нет, потому что все проверки делаются статически на этапе компиляции.
Прочитал раст бук, в целом понравилось. Много чего не понял, но под конец уже скучновато стало, так что буду на примерах разбираться.
Кто что вообще пишет на расте, кроме микросервисов для веба? Хотел бы для себя что-то написать, но гуи не нужен, игрушку думаю не потяну с 2 фултайм работами, нужно что-то, на что можно полчаса/час в день уделять и чтобы по фану было.
Книжка уже старовата, да и некоторые вещи там хуёво написаны, но если не писать игори, то что вообще писать? Хотя я лично рекомендую Legion, а не Specs. Первый намного круче.
>>1977433 напиши рей трейсер, это не так сложно как кажется на первый взгляд, можно уложится в 1000 строк кода, а как работает каждая функция как раз можешь по пол часа разбирать, вывод можешь в картинку сделать или в гуи если охота с опенгл поебаться, но тогда уже 1к строк не уложишься
>>1977895 Это тоже однохуйственно. Вот этот анон >>1977321 правильно объяснил: компилятор весь код прочесывает на соответствие типов, и в рантайме все будет статически. Но я бы не стал использовать эту фичу, чтобы себя не наебать. Зачем это нужно вообще не могу понять, код не сокращает, ясности не вносит, но запутать может легко. Наверное я просто в философию не до врубился.
Анон, подскажи. В rust в основной либе многого нету, и предлагается cargo указывать зависимости в ручную в теге [dependencies] А где есть вот этот реестр официальных но не включенных зависимостей для rust?
Мельком почитал макросы в rust - ну просто пиздец днина ебаная. Нет, по сравнению с изжопной дрисней из C(++) - это прогресс, но блять предоставлять доступ к AST языка в самом языке - сразу виден почерк титулованного говноеда. Бог дал им метапрограмминг на завтипах, но нет, лучше сделаем ебаного мутанта из сишных макросов
>>1978498 Трансы пидорасы коммитили в upstream rust'а, значит зашкварили. По понятиям всё, раст - зашкваренный язык. А если ты скачивал офф. релиз на диск, то закшварил ты диск.
>>1978601 Трансы - не пидорасы, а уважаемые арестанты. А ты сам то кто по масти? Junior cuck sucker? Ну так не стесняйся, проходи дальше по треду и под шконарь, уважаемый товарищ петушок.
>>1977047 Ну так type inference это попытка сделать статическую типизацию такой же лаконичной как динамическая. Так и было задумано. В динамической типизации больше гибкости за счёт меньшей производительности: ты можешь вращать ast прямо во время выполнения, делать eval, получать список переменных в текущем скоупе и прочие приседания которые невозможны/неоправданно сложны в статике.
>>1976966 Кошкодевочки просто хотят разрушить всё что есть в этом мире и построить новый коммунизм, где никто их не будет называть обидными словами. А опенсурс как цель для атаки выбран потому что там безобидные гики-задроты, на которых всем можно нажаловаться чтобы их закрыли. Даже если гиков-задротов закроют, никто не запрещает делать форки и начинать новые организации, libreoffice не даст соврать.
>>1978490 > метапрограмминг на завтипах Много наметапрограммировал на завтипах? Давай нормальное сравнение со слайдами и почему нам это выгодно, иначе пиздабол простой.
>>1978941 Это лишь твоё мнение. Ты не способен ощутить на себе давление и токсичность всей это sci-fi bro культуры, потому что скорее всего сам являешься её частью. Кошкодевочки хотят сделать программирование доступным для всех желающих, без мобов токсиков-задротов и их ёбаных фюрерков Столманов, Торвальдсов и т.д.
>>1978991 Да чё не способен, сам бывал объектом травли и часто просто за глаза ненавидели лютой ненавистью. Вот только всяких любителей поднасрать админресурсом или травить толпой я ненавижу ещё больше.
>>1978991 Топят то они за правильные идеи, но "преисподняя полна добрыми намерениями, а небеса полны добрыми делами". Тенденцию к мировому тоталитаризму они только усугубляют. Столлман хоть борец против этого самого тоталитаризма. https://www.gnu.org/philosophy/right-to-read.ru.html глянь на год статьи. Кто тогда об этом думал кроме Столлмана?
>>1979085 >Столлман хоть борец против этого самого тоталитаризма. Это правильная вешь, но "преисподняя полна добрыми намерениями, а небеса полны добрыми делами". Тенденцию к мировому тоталитаризму он только усугубляет.
>>1979109 Столман свободный имакс написал в свое время. Кошкодевочки в основном только судятся, продавливают законы, искушая государство на подавление свободы слова.
>>1978991 >Кошкодевочки хотят сделать программирование доступным для всех желающих А оно и сейчас доступно, просто кiшкодивчины не хотят собственно программировать, а хотят аппроприировать эту субкультуру, получать 300К\сек и чтобы их в попу целовали
>>1981500 Гордиться илитарностью от понимания хуево спроектированного синтаксиса в следствии кривой реализации благой идеи и переучивать либу и синтаксис раз в полгода - это хуже чем уметь трифорсить и троллить этим в б, а нынче это /postcount
>>1981512 > Гордиться илитарностью от понимания хуево спроектированного синтаксиса в следствии кривой реализации Ты ошибся, это тред по расту, а не по крестоговну.
>>1981659 Как будто в крестах не так. Выходит новый стандарт раз в три года, считай другой язык вышел, всё теперь надо делать по-другому. Ну ещё заучить талмуд новых undefined behaviour.
>>1986443 Ты бы взглянул на первые версии раста, там один в один плюсы с небольшим сахарком. Они и есть цпп-деды, которых заебало. Многое пофиксили, но можно вывезти девушку из C++, но нельзя вывезти С++ из девушки
Книгу по расту не читай @ вопросы сразу задавай: Для чего нужен RefCell? Почему не заюзать Arc & Mutex? Вопросы по AsRef & AsMut - для чего эти конверсии нужны? С виду внутри они ничего не делают. По сути возвращают тот же self. Спасибо заранее за ответы
>>1987705 >Для чего нужен RefCell? Почему не заюзать Arc & Mutex? > Они используют атомики и, внезапно, мьютексы, поэтому без многопоточности только замедляют код.
>>1987705 >Вопросы по AsRef & AsMut - для чего эти конверсии нужны? С виду внутри они ничего не делают. По сути возвращают тот же self. >
Всякие хаки с дженериками. Например в метод get HashMap<String, i32> можно передать ссылку на слайс, на String или на Cow<str>, и она все проглотит из коробки. Иначе пришлось бы везде писать as_str().
Хочу сделать консольную фигню, которая будет скачивать с веб-странички все пдф-файлы и вытаскивать из них картинки. Какие либы прошаренный анон порекомендует использовать, чтоб получилось модно, асинхронно и с огоньком?
>>1987705 Про рефселл тебе ответили, а вот про AsRef и AsMut у тебя неверные данные, ибо берётся ссылка на `Self`, а возвращается ссылка на `T`. Например, есть вот такой вот импл:
impl AsRef<[u8]> for str
В итоге в функцию, которая принимает `impl AsRef<[u8]>` ты можешь запихать как слайс байтов, так и строчку.
При этом и этих трейтов есть некоторое различие с Borrow и BorrowMut, но оно скорее философское.
Допустим, есть у меня 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
>>1994300 Хотел избежать обработки логики в теле цикла, но в итоге пришлось делать так.
>>1994304 Да, примерно так и получилось, но чтобы избежать повторения проверок, пришлось побольше логики вытащить наружу в enum и уже там обрабатывать.
>>1988305 Тебе бы лучше headless chromium и какой-нибудь puppeteer. Модно асинхронно и с огоньком не везде получится страницы проходить, а уж особенно мокрописьки качать, которые всевозможными способами защищены от автоскачивания.
>>1880122 (OP) Пиздец, неужели нет простого способа сделать статический раст-бинарник, не прибегая к изъебствам вроде линковки с собранными из исходников либами (musl, openssl итд)? В go вот заебись сделали, хоть он и параша сам по себе.
Поставил себе VSCodium, накатил аддоны для Rust-а. Добавил папку с Cargo в PATH через xinitrc. Запускаю - выдаёт ошибку, Rustup not available. Install from https://www.rustup.rs/ Чё за хуйня? Rust установлен. cargo bueld/run в консоли работает. Даже прости господи, через аддон для Вима работает. А в этой херне - нет. Чё за хуйня?
>>1997268 Судя по тому, что ты умничаешь с xinitrc, коренная причина в том, что ты в некотором роде долбоёб. Способов же прострелить себе ногу у тебя масса: ты мог поставить свой кодиум через какую-нибудь контейнерную срань типа snap; ты сидишь под wayland и ему поебать на твой иксовый конфиг; ты мог использовать ~ и переменные в PATH вместо прямых путей... Просто зайди в сеттингс-экстеншенс-раст, задай прямые пути, и не еби анону мозг.
>>1997681 Нет, наоборот, я хочу слинковать все библиотеки статически. Чтобы готовому бинарнику не требовалось никакое окружение и его можно было бы использовать в docker-образах, собранных с помощью "FROM scratch". Легко добиться этого невозможно, т.к. растовые бинарники динамически слинкованы с glibc. Ок, можно вместо glibc использовать musl, но в таком случае, если проект использует, например, openssl, zlib, curl, придется еще и их собирать самому и тоже линковать статически. В то время, как в go достаточно, грубо говоря, "-tags netgo" и все заебись работает.
В расте самый мимнимальный подходящий для дефолтной сборки образ - distroless/cc-* от google, но там все равно 20 лишних мегабайт лежит. Хотелось бы и от них избавиться.
>>1997688 >"-tags netgo" и все заебись работает Каким образом? В самом трушном гугловом bazel, которым внутри гугла все бинари собирают статически, надо конкретно поебаться, чтобы статически залинковать сишный рантайм. У меня большие сомнения, что go линкует libc статически, ведь смысл внутригугловой политики all build static - в том, чтобы не управлять зависимостями их собственных библиотек, а не в том, чтобы полностью отвязаться от конкретной libc на дистрибутиве. Там и так везде свой унифицированный линукс, собранный и обновляемый из местной монорепы. А собирать все, кроме libc статически умеет и раст, и go, и их же bazel.
>>1997848 Алсо, ровные ребята давно перешли на unikernel, а ты все еще следуешь старинным традициям из 2018г.
>>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 нет).
>>1998050 >Ты, тащемта, прав, go не линкует (g)libc статически - он вообще не использует (g)libc. Я нагуглил, что в go мейнстримный рантайм использует свою собственную реализацию для осуществления сисколлов. В rust есть нативные альтернативы libc, но их нельзя назвать мейнстримом, на котором работает подавляющее большинство пакетов. Так что вот така хуйня
Аноны, а как в расте с утиной типизацией? В книге трейты всегда привязываются к конкретным типам через impl блоки. А можно ли, как в плюсовых шаблонах, работать просто со всеми типами, совместимыми по сигнатурам методов и полей?
>>1999672 Можешь определить макрос вида impl $TypeName { } и вызывать для каждого типа. Это не универсально и крайне херово масштабируется, но работает.
fn foo<G>(g: G) where G: Generic<Repr = DuckType::Repr>, { let duck: Ducktype = frunk::convert_from(g); }
Но очевидно, что для работы такого дактайпинга тебе надо на все используемые типы задерайвить Generic трейт. Так что на типы из чужих либ ты таким образом дактайпить не сможешь.
>>2001099 Как я понял const не подчиняется некоторым правилам работы с переменными. (Можно строго сказать что это и не переменная вовсе)
Во многих местах будет просто подставляться полное значение этой константы, также macro_rules! их не санитизирует. В результате можно увидеть приколюхи вроде таких:
А вот и оно! Когда-то я спрашивал про то почему в раст можно передать Some(х) в функцию, которая ожидает функцию. Прекрасное объяснение от matklad (контрибьютор в раст, обучает людей. всем рекомендую эти видео. Он еще вроде создатель rust-analyzer по крайней мере плагин для vscode показывается так) https://youtu.be/32cSLAe4aOw?list=PLlb7e2G7aSpTfhiECYNI2EZ1uAluUqE_e&t=918