Rust — невероятно быстрый язык для системного программирования без segfault'ов и с гарантиями потокобезопасности.ИТТ мы можем объяснить базовые и продвинутые концепции языка, ипрограммирования в целом, поможем вкатывающимся, подскажем чтовыбрать для веба, игр или спасибо абу блокчейна.https://www.rust-lang.org> Пачиму helloworld весит как моя мамка?!1йhttps://lifthrasiir.github.io/rustlog/why-is-a-rust-executable-large.htmlЧитатьОф. книга, она же растбукhttps://doc.rust-lang.org/book/https://rustbyexample.com/Очень хорошая книга, отлично зайдет после растбука:http://shop.oreilly.com/product/0636920040385.doУпражненияhttps://exercism.io/tracks/rusthttps://github.com/crazymykl/rust-koansПисатьIDEhttps://areweideyet.com/Вебняhttp://www.arewewebyet.org/Игрыhttp://arewegameyet.com/Etchttps://wiki.mozilla.org/AreweyetСписок интересных проектовhttps://github.com/rust-unofficial/awesome-rustНовостиКомпиляция всего, что произошло за неделюИногда постят вакансииhttps://this-week-in-rust.org/Сколько вешать в лайкахhttps://github.com/trending/rustОп рекомендует:https://www.amethyst.rs/https://github.com/TatriX/dvach
>>1327089 (OP)Взял вашу книжку полистать. Первая же угадайка поломалась: io::stdin().read_line(&mut guess) .expect("Feiled to readlineliiil)"); Даёт ошибку "type `core::result::Result<usize, std::io::error::Error>` does not implement any method in scope named `expect`"А вот это робит: io::stdin().read_line(&mut guess);Да, жалуется, но поведение хотя бы запускается и делает что надо.Что за хуйня?
>>1327246https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=5dc4b0297adbcd57cb9a33b5a6e7dd64Хуй тебя знает.
>>1327249>>1327250Обнаружил в чём проблема:rustc 1.0.0-beta (9854143cb 2015-04-02) (built 2015-04-02)cargo 0.0.1-pre-nightly (84d6d2c 2015-03-31) (built 2015-04-01)И это на офсайте ж нашёл. rustup-init, кстати, не сработал почему-то.Сейчас бету снёт, накатил 1.31.1 - всё хорошо.Внезапно и cargo стало прям как по примерам генерировать всё.
Объясняю почему Rust говно. 1) Как системный ЯП, Rust медленнее, чем C. Причем, в одном случае вы будете ебаться со сложной системой управления памятью (аки защита от макак) , а в другом - с собственным говнокодом. Подразумевается, что системеный программист не макака и способен нормально организовать работу с памятью, без искусственных ограничений встроенных в ЯП.2) Как прикладной ЯП неудобен (см. пункт 1). Невасянский GC не завезли.
>>1327261Количество уязвимостей в коде твоего сферического системного программиста показывает что можно пожертвовать скоростью в пользу безопасности в общем случае. Впрочем, утверждение что одно медленней другого так же ничем не подкреплено.
>>1327261Но ведь системное программирование не ставит своей целью сверхскорости. Это скорее побочный эффект с того, что С фактически является обёрткой над Ассемблером.
>>1327261Дак ты, это, не с Цэ сравнивай, а с Цэ++. Быстрее сей бывает только ёбля голого ассемблера и фортрана.Аноны, я и сам хуй простой, только вкатываюсь. Такой вопрос, как бы сделать(a as i16 - b as i16).abs() as u8но поизящнее? Нужно вычесть из одного беззнакового другое, получается только вот так топорно.
>>1327335Хихикающая девочка-фротнендер? Заёбанный дядя-плюсист с пятью детьми? Школьник-максималист с комплексом великого провокатора?Кто же ты, о чудо?
>>1327393Ну а как бы ты вычел на ассемблере? Тут или распаковывать в знаковое, или вычитать из большего меньшее. Вот системность раста, как языка, она об этом. Вот тут даже хз, что будет шустрее, вроде бы на simd есть команды для сравнения и сортировки, так что и там, и там вариант со сравнением, скорее всего.
>>1327509Ничего плохого если ты сам этим занимаешься. Не любят из-за товарищей которые в иссуях на гитхабе капают на мозги мол давай переписывай свою хуйню на раст, раст ебать топчик.
Вопрос к прошаренным. Не сочтите за наезд или троллинг.Раст вообще развивается? Что там нового? Просто часто слышу в разговорах, что раст застопорился. Расскажите кому не лень и кто шарит. Только подробно.
>>1327625Хуясе застопорился. Недавно выкатили 2018 версию с кучей новых фич. В этом году ожидаются две большие фичи: корутины и константы в генериках. А так сами разработчики не хотят торопить события и сосредоточится на стабилизации и допиливании существующих фич, а не придумывании новых.
>>1327627Ясно. Смотрел давно видос, что лысый из яндекса нахваливал язык. Сейчас где юзают его, в каких проектах/конторах?
>>1327487>заглатывает и у це++https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/c.htmlу него и сишечка заглатывает, если так посмотреть.
Что-то я читаю всякие реддиты-медиумы-хакерньюсы в последнее время и замечаю , что люди прям срут на раст. И собсна вопрос, а чего нас так вдруг невзлюбили? Язык не особо чем выделяется, чтоб говном поливать. Растаманы не индусы, и не фронтендеры. Оглядел тред, тут тоже какие-то буйственные настроения. В чем хейт то пошел ? Я что-то пропустил ?
>>1328487Сперва был хайп, переоценка, теперь идёт откат. Таким маятником и устаканится отношение к нему.Не срут же на джулию, с которой я на него вкатился, а она то ещё говнецо.
>>1328487> Что-то я читаю всякие реддиты-медиумы-хакерньюсы в последнее время и замечаю , что люди прям срут на раст. И собсна вопрос, а чего нас так вдруг невзлюбили? Язык не особо чем выделяется, чтоб говном поливать. Растаманы не индусы, и не фронтендеры. Оглядел тред, тут тоже какие-то буйственные настроения. В чем хейт то пошел ? Я что-то пропустил ? Разочарование, хотели чтобы язык кресты убил, а он в середине своего развития упоролся и чижика съел. Ну и в первую очередь потому что хотелки нипалучились и устраивающей всех по фичам стабильной спеки ещё так и не вышло.
>>1327089 (OP)>Rust — невероятно быстрый языкТакой быстрый, что в некоторых тестах даже медленнее C#>regex-redux>C# .NET Core 2.22>Rust 2.44
>>1328571Лол, я даже не глядя уже понял , с какого сайта бенчмарки такие идут. Интересно , сколько ещё клованов найдется , которые все его цитировать будут. В каждом ебаном треде о каждом ебаном языке, блять.
>>1328571>[DllImport("pcre2-8", EntryPoint = "pcre2_compile_8", CharSet = CharSet.Ansi)]Эх, щас бы сравнить встроенную библиотеку раста с сишной библиотекой регулярок от гугла и назвать это тестом перформанса раста вс шарпа ¯\_(ツ)_/¯
>>1328487Дизайн языка плохой, рестриктивный.Он не делает решение никаких задач проще. Запретили одну дырявую абстракцию, в итоге на расте пишут другие точно такие-же дырявую абстракции адресации памяти с точно такими-же багами.
>>1328643А тебе кто-то запрещает использовать интероп в шарпе?Наоборот, это преимущество языка. 90% кода пишутся на простом, высокоуровневом языке, а там, где нужна производительность, вынести в быстрые библиотеки.
>>1328655Это всё очень хорошо, но это не будет показателем производительности C#, так что такие бенчмарки идут нахуй.
>>1328649>Он не делает решение никаких задач проще. Он делает проще задачу поиска проблем из категории buffer overrun, use-after-free и aliasing. Ничего кроме этого он не заявлял.
>Rust is fastNot with the number of defensive copies or arbitrary synchronizations you need to make to satisfy the BC.>Rust can easily integrate with other languagesNo stable ABI>Rich type systemNo HKTsNo pi types>guarantee memory-safetyStill trivial to leak memory with a reference cycle>productivityEnjoy fighting the BC more than doing actual work
>>1328664> Enjoy fighting the BC more than doing actual work С таким настроением только в языки с gc.
>>1328487На всё чем хоть кто-то пользуется срут все кому не лень, см. цитату Страуструпа.Алсо, так же можешь посмотреть на коменты под новостями о новых версиях какого нибудь окамла (которых нет). Так что, наличие критики = используемость.
>>1328670Че, неприятно? Язык не оправдывает своих ожиданий и разработчики нагло врут о якобы быстром языке.
>>1328769https://github.com/rust-lang/rfcs/issueshttps://github.com/rust-lang/rust/issuesхз, тебе что нужно-то? go, вон, вообще почти не развивается - а хипстеры жрут и добавки просят. Фич уже предостаточно, чтобы взять и пользоваться.
>>1327232по поводу гомофобии, которая постоянно всплывает в растотредахвы хоть понимаете, что это не только раста касается, а вообще всех новых технологий разрабатываемых в бездуховных геймерике и гейропе? где они преобладают, там и кок/сжв/лгбт будут как правило! и в таком случае вы предлагаете из-за этого тупо гасить всё новое оттуда или есть варианты получше?
>>1328815Программировать на C++, разве там много LGBT?>>1328818>по существу нечего сказатьПочитай это >>1328664
>>1328821Нечего там читать. "Я не осилил борроу-чекер, я хочу систему типов как в языках с гц, но с перформансом сишечки". Хотеть не вредно.
>>1328823Борроу-чекер просто НЕ позволяет тебе писать быстрый кодКакой сейфти, если утечку памяти можно сделать через обычный референс цикл?Какое компатибилити, если хуево поддерживается двоичный интерфейс приложений?Ну и видимо, кроме hello world'ов ты сложнее ничего не писал, да и понятно почему, ты не смог заставить код работать из-за BC
>>1328828Мань, ну вычитал ты где-то кукареки того, кто не разбирается в том о чем говорит, ну молодец.Пруфа про связь борроу-чекера и скорости?Мемори-сейфити != нет утечек памятиКакая связь между гаратниями совместимости между версиями раста и ABI?
>>1328821>Программировать на C++, разве там много LGBT?сразу вспомнилась картинка двух программистов в леопардовой раскраскене знаю как сейчас, но если для с++ предполагается приток новых программистов, то там будет также, ибо новые поколения молодых людей уже воспитываются в том духе, который неприятен гомофобамчто тогда будете делать?
>>1328841Создадут нормальный язык. И в этом случае производительность программистов будет намного больше, чем на других, лгбтшных, потому что им не нужно бороться с самоидентификацией и харассментом
>>1328844Очень надеюсь что ты либо тупой троль, либо глупый ребенок. Потому что иначе, у меня для тебя плохие новости.
>>1328844http://программирование-по-русски.рф/%D1%8F%D1%80.%D1%8F%D1%80%D0%B3%D1%82/что скажешь насчёт этого?
>>1328845Во-первых, вы тысячу лет ебетесь с BC. Осилить BC значит потратить дохуя драгоценного времени, вместо работыВо-вторых, это гендерно-небинарные животные. Любой откровенно плохой код будет котироваться, т.к. "плохой код" - это термин цисгендерных угнетателей.В-третьих, а впрочем, уже достаточно.
>>1328853> Осилить BC значит потратить дохуя драгоценного времени, вместо работыНе осилить бц значит потратить больше времени на последующую отладку. Или ты тот самый гениальный программист который пишет сразу без ошибок? Тогда непонятно с чего вдруг у тебя проблемы на такой мелочи как бц.
>>1328844>Создадут нормальный язык.а с железом и всеми остальными технологиями как быть? приходите за техподдержкой, а там ОНИ
>>1328831>Мемори-сейфитиНе было и никогда не будет. Анально огораживаешь одну модель памяти, а потом прописывает не тот индекс массива и ловишь panic
>>1328888во-первых, никто не запрещает тебе пользоваться итераторами и прочую функциональщину.во-вторых, сейфти там скорее о том, что у тебя не возникнет ситуаций, когда 2 потока меняют значения по одному адресу, либо один поток удалил массив, а второй об этом не в курсе (на сях такая поебень даже в однопоточном коде встречается).в-третьих, у раста хотя бы паники адекватные. Я бы даже сказал, приятные.
>>1328888Ну дык обращение по индексу делается если ты точно стопроцентно уверен что нужное значение там есть. Если не уверен, делаешь get(i) и получаешь свой Option<T>
Non-lexical lifetimes можно как-то отключить?Знаю что можно выставить edition = "2015", но это все 2018-edition-фичи отключит, а можно ли вырубить отдельно nnl?
>>1328809Мне интересно НОРМАЛЬНОЕ и объективное мнение по языку. Я зашел не тролить, мне реально интересно, потому что нравится С++(На работе java). Просто я не хочу пока что в него погружаться, чтобы разбираться в нём. Своё мнение напиши. Как язык, что нравится а что нет.
>>1328812Конечно нет. Взгляни на этого парня. Он ебёт шведских цыпок по две штуки в день пикапя их рассказами про хаскель.
>>1329092Ну, мне пока всё нра. Не хватает https://github.com/rust-lang/rfcs/issues/2092 разве что.Если сравнивать с плюсами, то у раста- меньше паник- паники читабельны и понятны (сегфолты в плюсовом ооп коде та ещё мерзость)- есть cargoопять же, у плюсов есть хорошие фичи, типа умных указателей (не бц, но типа похоже), но это опционально - можешь юзать, а можешь и не юзать. Или ты будешь юзать, а кто-то нет - в какую-нибудь стороннюю функцию, которая юзает обычные указатели, умный уже не передашь.А вообще я novichok, неделю на расте
>>1329092нормальное и объективное мнение: язык говно. тупо добавили read write lock для всех переменных на этапе компиляции.говорят, что многопоточное программирование сложное из-за ебли с синхронизацией и mutex'ами, т.к. сложно этот весь зоопарк контроллировать и уследить, нужно постоянно строить ментальную модель в голове что где откуда читается, где блокируется и т.д.а теперь представь, что ВЕСЬ код на расте нужно писать как многопоточный код с mutex'ами.
>>1329148А чего там сложно с мютексами-то? Вот с атомиками, да. Заебёшься придумывать как так сделать чтобы оно работало и было быстрее старого доброго лока.
>>1328888>анально огораживаешь одну модель памяти, а потом прописывает не тот индекс массива и ловишь panicА затем быстро находишь ошибку и исправляешь вместо того, чтобы весь день разбираться, почему сраный принтф печатает кучу кракозябр или откуда берется рандомный сегфолт.>>1329148>говорят, что многопоточное программирование сложное из-за ебли с синхронизацией и mutex'ами, Многопоточное программирование сложное, потому что всякие долбоёбы берут последовательную логику, херачат мьютексы на каждый чих и удивляются, а чего это всё стало медленнее, чем было.>а теперь представь, что ВЕСЬ код на расте нужно писать как многопоточный код с mutex'ами.Если ты не макака, ты ХОЧЕШЬ писать в таком стиле что на плюсах, что на Питоне, потому что огребешь проблем, если вызов функции поменял состояние , а ты не уследил.
>>1329148>ВЕСЬ код на расте нужно писать как многопоточный код с mutex'амиЧИВО БЛЯТЬ? То есть я абсолютно не понимаю что ты спизданул. Какой весь код с мьютексами? Код пишется абсолютно нормально. Да, иногда приходится думать, почему ругается BC, но как бы тут на тебя ругается компилятор, а в C(++) это будет или сегфолт, или какая-нибудь забавная гонка данных, которую хуй отладишь. Или оверхед на смарт-поинтеры, да. А сейчас еще NLL в раст добавили, теперь можно потихоньку и отвыкать от старых правил.Да, бывает, что BC на нормальный код ругается и приходится подсказывать ему с помощью лафйтаймов, но это крайне редкий случай, и лучше уж так, чем потом сидет в дебагере, разбирая, а где же там все разъебалось.
>>1329726> Пока не скомпилируешь, не поймёшь есть ошибки или нет.Есть RLS, он компилирует в бекграунде и показывает ошибки сразу. А вообще двачую. Лучше бы сделали как в C++: пока не запустишь, не поймёшь есть ошибки или нет.
>>1329726Так падажжи ебана, а что не так? Конечно можно как в джаваскрипте ловить "undefined is not defined", но я как-то предпочту отловить ошибку ДО ТОГО, как программа запуститься. Странное желание, конечно.
>>1329796Думаю он имел ввиду что раньше ошибки лайфтамов он мог найти даже без компиляции - статическим анализом, посчитав скоупы. Вообще я не знаю нужна ли компиляция теперь, но проверять "в голове" определённо сложнее стало.>>1329540Вот собственно затем.Я раст только изучаю, а nnl усложняет понимание и так сложной системы лайфтаймов.
>>1329966Нужно всего лишь этот статический анализатор сделать и будет работать ровно так (или таки воспользоваться RLS/Racer).ТО есть в такой формулировке проблема только в том что еще нет такого инструмента. В C++ вряд ли IDE волшебным образом находила сама ошибки, да.
>>1329966>я не знаю нужна ли компиляция теперьУ меня в виме плагинчик, которых высвечивает мои косяки при каждом сохранении файла - вы об этом? Если да, то хз, как вы без этого живёте.алсо, поясните за лайфтаймы и вообще структуру - не наворотил ли я пиздеца
>>1330480> My main reason is that I have chosen to pursue a career in mathematics research.Ну понял чел что писать код это не его. Что с того?
>>1330480The proposals were not aligned with the language goals. I was, as is recurring, too ambitious, thinking that I could reform the whole type system with all these new nice theoretical properties, many of which are more complicated than useful.Вся суть
>>1330973Хотелось построжее. Однако, эти лайфтаймы, энто что-то, а вот вектор, ну совсем распиздяйский тип. Но я нашёл сторонний костыль - ArrayVec.
>>1331177Построже с чем? Единственное прямо преимущество, которое я вижу, это потенциально более эффективная работа слайсов, по сравнению с веторами.А так вообще непонятно какую задачу ты пытаешься решить. Судя по ArrayVec ты знаешь уже конечный размер своей "матрицы". Тогда почему не просто массив массивов?
Начинаю только изучать RustПодскажите, пожалуйста, что означает символ "?" в конце некоторых функций/методов? И как он называется, чтобы пойти в доках почитать подробнее
>>1331773https://doc.rust-lang.org/book/ch09-02-recoverable-errors-with-result.html#a-shortcut-for-propagating-errors-the--operator
>>1331292>почему не просто массив массивовмне нужен массив массивов с конечным типом ImageBuffer. Допустим, у меня 40 на 40 - как мне проинициализировать такую-то еблолу?1. С ссылками я мог бы сделать [[&someImage; 40]; 40];но ссылки в структуре, это пока неподвластное мне ниндзютсу2. Если использовать [[someImage; 40]; 40], то это даёт ебический оверхед при создании - сперва скопируй 40х40 раз одну хуйню, потом заполни другой.3. Можно обернуть ImageBuffer в п.2 в Option и заполнить нонами вместо someImage, но на хрен такое только ради создания - потом-то у меня однозначно всё на месте будет.4. Остаётся юзать вектор, как и остальным слабакам
>>1331922То есть я правильно понял, что тебе нужен 40x40 массив со ссылками на уже существующие объекты? Или что? Вот ты пишешь: > мне нужен массив массивов с конечным типом ImageBufferТогда зачем тебе массив со ссылками на этот тип? Почему не сразу массив массивов из этого типа? (про оверхед вообще не вдуплил, что ты там и куда копируешь, сори).Если проблема в том чтобы проинициализировать, то тут или вектором, или намути макрос, который за тебя заебашит инициализацию такого массива (я даже уверен что уже подобные хелперы существуют).
>>1331979Может я тупой, но.. проблема в том, чтобы создать пустой массив типа ImageBuffer и потом заполнить значениями. Нужно или сразу создать заполненный - а это лишнее копирование, или сразу инициировать - а это 1600+ строк кода инициализации. Хотя, на счёт макроса я погуглю, сам такое писать пока не осилю.>>1331953>одна и та же хуйня 1600 развот так в расте инициализируются массивы. Сперва одна хуйня 1600 раз, а уж потом фигачишь туда 1600 разных хуйней вместо неё.
>>1331987Все, понял. Ну да, создать "пустой массив" нельзя (как через malloc в C), ибо получится кусок памяти, который заполнен мусором (очевидно). Проще всего тогда через векторы, наверно:let x: Vec<Vec<ImageBuffer>> = vec![Vec::with_capacity(40); 40];Правда некрасиво, все-таки ты тут нигде явно не задаешь ограничения на размер. Но ежели это запихнуть внутрьЕсть еще ОЧЕНЬ НЕКРАСИВЫЙ вариант: https://doc.rust-lang.org/nomicon/unchecked-uninit.html , но я бы без веской необходимости им не пользовался.>вот так в расте инициализируются массивы. Сперва одна хуйня 1600 раз, а уж потом фигачишь туда 1600 разных хуйней вместо неё.Ну так ты сразу пихай туда нужную хуйню.
>>1332011Нашёл array-macro, заглянул ему под хвост, а там всё тот же ArrayVec https://github.com/xfix/array-macro/blob/master/src/lib.rs короч, пока на ArrayVec я и посижу.
Лол, я этого автора уже по заголовкам определяю, очень у него статьи своеобразные.https://habr.com/ru/post/437128/
Посоны, а если я открытый гейсо всеми атрибутами типа полосатого хедера в свиттере, радужного бэкграунда на аватарках и тд, это будет считаться преимуществом при отборе на вакансию?
>>1334315>>1334327ГЫЫЫЫЫЫ мам смотри там педики в разработке конпелятора участвуют ГЫЫЫЫЫ на работу на расте берут только педиков ГЫЫЫЫ мам я затролел ихпожалуйста, съеби назад в свой пщ-тред, ребенок
>>1334476>яростный кукарек обиженного СоСолдадумаю, теперь всем окончательно стал понятен общий уровень завсегдатаев этого треда
>>1334548> бля ахаха смотрите там педики а если я педик меня возьмут к ним гыгыгыОчень смешно, да. Может тебе еще и русские комедии нравятся?
Аноны, поздравьте меня с первым unsafe: мучу каст из Vec[u8] в Vec<Rgb<u8>>вообще, сразу вопрос: ImageBuffer<Rgb<u8>, Vec[u8]> => (через .into_raw()) => Vec[u8] => (через unsafe mem::transmute::) => Vec<Rgb<u8>>я ничего по пути не проебу?картинка на случай проёба разметки
>>1334770А ты уверен, что у Rbg<u8> паддинга нету?Лучше реализуй для Vec<u8> что-то типа GetPoint() -> Rgb<u8>. Или вообще сделай свой ImageBuffer массивом векторов, так и векторизация лучше работать будет.
>>1334770Покажи лучше код. Из твоего описания тяжело сказать, не проебешь ли ты чего. Но кажется что не должен, Rgb устроен максимально примитивно (это же из image, да?), там вряд ли что может помешать (разве что на вход получишь таки не Rgb картинку, а что либо другое).
>>1334799>imageда оно самое. Кода много, я там типы привожу, макросы хуячу - чтобы безболезненно можно было на Rgba или grayscale перекатиться.>>1334791>у Rbg<u8> паддинга нетуА вот как понять? Вроде простая структура https://docs.rs/image/0.21.0/image/struct.Rgb.htmlЛан, сча тестом покрою через обратную конвертацию и сравнение, и заебок. Как же охуенно, что в расте так элементарно пишутся тесты.
Я раст не знаю, но мне очень интересует наверное единственный существующий язык-альтернатива си. И меня интересует, каким именно образом в расте осуществляется в ней защита от утечек памяти и потокобезопасность?
>>1334841> И меня интересует, каким именно образом в расте осуществляется в ней защита от утечек памяти и потокобезопасность?Никак, Раст защищает от неопределенного поведения и гонок данных. Система типов в статике и\или проверки в рантайме не дают двум потокам получить доступ для записи к одному ресурсу из двух мест одновременно. Утечки, если постараться, можно получить, от дедлоков, если действовать неаккуратно, тоже никуда не денешься..
>>1334850>Утечки, если постараться, можно получитьА если стараться не получать утечки, то легче ли их будет предотвратить чем в С?Я хоть на С и писал только одни лабы, но даже в них всё равно сталкивался с утечками памяти, даже когда старался их предотвратить. В расте с этим всё как я понимаю намного проще и компилятор не даст скомпилировать откровенную лажу?
>>1334926В си ты скорее всего просто забывал освободить память, оттуда и утечки.Чтобы получить утечки в расте, нужно сделать хитровыебанный цикл между Rc.
>>1334933>В си ты скорее всего просто забывал освободить память, оттуда и утечкиИменно так и есть. Поэтому для обнаружения и предотвращения утечек мне приходилось использовать следующий метод: я запускал проверяемый кусок в бесконечном цикле и смотрел в менеджере процессов на потребляемую процессом память. Если она оставалась константной, то значит всё в порядке, а если нет, то значит в освобождении памяти есть ошибка. И как не странно, выяснялось, что утечки встречались намного чаще, чем этого хотелось.
>>1334936Открой для себя valgrind.А лучше пиши на расте и не парься. Вероятность обосраться в нём на столько меньше, что до своего первого дедлока/утечки ты успеешь обписаться.
>>1334937>Открой для себя valgrind.Я вообще не сторонник дебагеров. И весь дебаг обычно провожу прямо в голове. Ну или пишу вспомогательные куски кода для тестирования.
>>1334942Лаба лабе рознь. И бывали у меня и такие лабы, которые две недели нужно было писать по несколько часов каждый день.
>>1334476>в свой пщ-тредне, он не из пщ-треда, ибо всё, что появилось за последние 10 лет, уже опидорено, и так будет и дальше продолжаться и усиливаться пока мы паразитируем на технологиях бездуховных геймерики и гейропы
>>1334936>Именно так и есть. Поэтому для обнаружения и предотвращения утечек мне приходилось использовать следующий метод: я запускал проверяемый кусок в бесконечном цикле и смотрел в менеджере процессов на потребляемую процессом память.Конкретно эту проблему решили еще в С++ (до 11-го стандарте на уровне "можно сделать"), просто из-за кучи слоёв абстракции это породило ряд иных дырок.
>>1335050Я про весь подход с RAII в целом. Благодаря смартпоинтерам стало приятнее писать деструкторы, но в любом случае, если в Си на каждый malloc приходилось писать free, то в плюсах нужно было описать одну функцию, которая вызывается сама.
>>1335056Вот только ты можешь этого и не делать.И люди уровня label3.cpp в рот ебали эти ваши смартпоинтеры.
>>1328659>программа на языке не показатель производительности языка))В манямирке шизиков только, а в реальном мире, что язык может - то и производительность. Производительность может быть только у реальных написанных программ, а не у маняязыка в избирательном шизиками вакууме.
>>1335056> если в Си на каждый malloc приходилось писать freeНе-а. Самая большая проблема в том, что у функции может быть несколько точек выхода. Типаvoid yoba() {x = malloc(...);if (!peka()) { free(x); return;}if (!psshh()) { free(x); return;}}Поэтому тебе не на каждый malloc нужно писать free, а намного больше, на каждый выход x из области видимости. А чтобы не было бойлерплейта использовать goto.void yoba() {x = malloc(...);if (!peka()) { goto cleanup;}if (!psshh()) { goto cleanup;}cleanup: free(x);}при чем этих cleanup'ов может быть несколько, в зависимости от логики.И вот это уже пиздец.>>1335060А люди уровнем повыше ебутся.
>>1335177В том то и дело что нет. Язык это то на чем ты пишешь программы. Ты не пишешь библиотеки на других языках, а только их подключаешь.
>>1335364>Получается, если подключить ту же либу к Расту, то Раст окажется быстрее Раста?Вот ты ебодятел-то, а. Эта либа написана на С, 99% времени работает она, соответственно, ты измеряешь скорость работы алгоритма в его реализации на С. Эту же либу можно и к бидону подключить - внезапно, какой охуенно быстрый язык получится.
>>1335467Игорь, ты? Помнишь меня? Я твой одноклассник. Я узнал тебя по твоим шизоидным словам и высерам. А помнишь, как мы всем классом нассали тебе в кружку в третьем классе, на сладкоежке? Ты ещё выпил, облизнулся и попросил добавки. А потом тебя пришёл забирать твой отец, тот самый дворник, который на Вернадского изнасиловал собаку и получил условный срок за то, что украл плавленный сырок в магазине. Он зашёл в класс, все стали смеяться, а ты обосрался под себя от стыда, а потом сказал, что всю жизнь будешь ненавидеть дворником, но в 9м классе, когда ты пошёл на рейд, чтобы их отпиздить, то они пустили тебя по кругу, после чего тебе наложили на анус восемь швов. Как поживаешь, Игорян?
>>1335487Если бы ты использовал не настолько протухшую пасту, то мог бы блеснуть своей, экхм.., эрудированностью, что ли. А так и этим не смог. Сожалею, старайся лучше.
Ю-ху, анонии, насколько же легко писать тесты, охуеть. Я, конеш, понимаю, что есть gtest и для того же бидона куча либ. Но тут-то оно из коробки - а значит меньше велосипедов и больше взаимопонимания в растовом мирке.
>>1336343Немного. Уменьши контрастность всех остальных цветов. Или просто возьми monokai или любую другую готовую тему.
>>1336303Да, тесты вообще благословленные. Единственное немного раздражает то что в tests/ нельзя нормально сделать модуль, который сам тесты не содержит, а включается в другие модули с тестами. Приходится изворачиваться с tests/utils/mod.rs , чтобы оно не собирало этот модуль как отдельные тесты.
А я правильно понимаю, что сейчас нет никакого способа делать динамические библиотеки (да и статические тоже), которые можно было бы распространять без постоянной пересборки всех зависимостей? Интересует не сборка в сишную библиотеку и потом unsafe extern "C", а именно возможность подключить динамическую библиотеку, написанную на расте, и использовать оттуда безопасный растовый код
>>1336724Я как раз явно сказал, что интересует не это.>>1336730Хм. То есть вообще нет возможности распространять крейт кроме как исходный код?
>>1336730Ломают ABI.Что это значит? Я понимаю так. Скомпилил ты в исполняемый файл. Взял этот файл, отправил другу, у него стоит та же ос или выше, он его запустил, всё сделалось. Правильно?
>>1336769Да. Ну или сишная либа.>>1336774Скачал с сайта rayon.dll какую-нибудь, пытаешься её засунуть себе в проэкт, но сосешь хуй из-за того что ничего не собирается.Если исполняемый файл, то всё ок, там все либы статически слинкованы и ничего больше не требуется.
>>1336776> статически слинкованыТо есть весь их код переведён в машинный язык и засунут в этот же бинарник (исполняемый файл)?
>>1336776Хуево. Это же еще очень мешает коммерческому использованию языка, ведь ты не можешь сделать что-то и распространять это в виде блобов.
>>1336793Ну ты сам прикинь, какова доля либ в коммерции (обычно продают готовый продукт) и помножь эту долю на долю раста - вот ты получишь %, где это даже не необходимо, а "было бы неплохо". К тому времени. когда раст захватит мир, это наверняка реализуют.Что касается ускорения конпеляции, то для этого есть кэш и он неплохо работает.
Аноны, нид хелп. Как расшарить константу из главного модуля в либу и в дочерние крейты?https://github.com/rust-lang/rust-enhanced/issues/358https://stackoverflow.com/questions/37430628/rust-constants-in-different-modulesnot found in the crate root - если делать ::VERSIONnot found in `crate` - если делать crate::VERSIONя натурально заебался
>>1337019Он и так стринг. Проверку на ошибку (и вытаскивание из Result) ты уже сделал в виде .expect()
>>1337040Проблема в том, что я не знаю вводит ли юзер инпутом число... Инпут то в String хранится и нет смысла матчить на тот же i32.
>>1337076Парсить этот стринг и снова матчить. https://doc.rust-lang.org/std/primitive.str.html#method.parse
>>1336956Так оно, кстати, работает. Но, вишь какое дело, мне удобнее задать все константы в главном модуле, чтобы либы подхватывали их оттуда. Иначе мне придётся держать кучу констант для кучи либ (размеры массивов, пути, вот это всё) и при изменении каждый раз лазить в эти либы.Ещё такое: как сделать тесты в отдельном крейте? Делаю по манулам, какая-то хуйня получается - или ошибка импорта, или 0 тестов пассед из 0. Если есть линк на гитхаб с рабочим вариантом, буду оч признателен.
>>1337398Да кто только этого не говорил.В контексте раста, посмотри, например, вот это: https://www.youtube.com/watch?v=aKLntZcp27M
А что вообще с багами? Реально то игру вообще написать и не наткнуться на какую нибудь мистическую хуйню?
>>1337414Аметист активно пилят и вроде как частенько ломают АПИ.Пистон кажется перестали развивать.Еще есть ggez, но там тоже часто ломают апи.
А есть ли в этих движках физическая модель? Я так понимаю главная их цель конектится к какому нибудь OpenGL по сишному интерфейсу и отдавать юзеру Растовый интерфейс для рисования?
>>1337436Имеется ввиду игровой движок на расте. При том что движок должен уметь рисовать, вот я и говорю нах движок нужен если самому придётся брать то что этот чудодвижок нагородит делать из всего этого чуда вертексы и к openGL обращаться
>>1337439Что ты вообще несешь? Ты спрашивал про физ. движок. Физ движка из коробки нету.Рендерит движок сам.
>>1337443Анончик.У тебя есть игровой движок, скажем Аметист. Его задача дать тебе ECS и рендерить твою хуйню, что он с успехом и делает. Т.к. очевидно, ему нужна либа для работы с матаном, он юзает https://www.nalgebra.orgОтдельно от всего этого, есть еще физ. движок который используетт же либу для математики: nphysics.Да, физ. движок ничего не рисует.
https://kevinlynagh.com/notes/match-vs-lookup/ немного про внутренности, оптимизацию, ллвм, ир, мир, асм итд
>>1337187>задать все константы в главном модулеПо-моему ты неправильно воспринимаешь main.rs.lib.rs - как раз "главный" модуль крейта-библиотеки. main.rs - это отдельный крейт, который собирается в бинарник (bin-крейт), он вообще не часть библиотеки порождённой lib.rs.
>>1338243Ну то что ты написал это херня. Паттерн должен быть, я даже не знаю как сказать, константным выражением что ли (я не уверен, как правильно обозвать термин). Твой код можно переписать в таком виде:match input_department.as_str() { x if x == &departments[0] => ... , x if x == &departments[1] => ... , _ => panic!("Unknown departments")}Я думаю, что это ограничение (невозможность указать результат вызова функции как паттерн) связано с тем что синтаксис x(y) в паттерне все таки означает "Тип x с полем y, где содержимое x.0 привязывается к y и может использоваться после =>". Если бы мы могли слева от => указывать вызов функции, была бы неопредленность.
>>1338775Видимо пытается сматчить некий инпут с заранее заданными значениями и если такое есть, то где-то сохранить. Я бы на его месте перестал изъебываться и написал что-то типа такого:if departments.contains(&input_department) {hm.insert(input_name, input_department)} else {panic!("ВСЕ ПИЗДЕЦ НАХУЙ!")}
>>1338443Не. Никогда таким не интересовался.>>1338907Та ифами как-то уныло. То-ли дело ёба match.И до сих пор непонятно че оно ныло на вектор и нормально хавало перемнную на которую перед этим засаайнил тот же элемент вектора но это две лишних сточки кода.
>>1338357Дружок-пирожок но тут же >>1338261 я указываю обычной переменной и всё работает. И причем про мач сказано что оно матчит с тем что слева от арма ака =>
>>1338993Нихуя оно не работает у тебя. Ты не сравниваешь то что ты передал в match с ранее заданным xuy, ты просто взял и то что ты передал в match связал с именем xuy в рамках конкретного => . При этом у тебя ЛЮБОЙ вход будет удолетворять первой строчке match'а, и остальные компилятор должен пометить warning'ом как недостижимые.Вот тебе пример, если нужно нагляднее: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=906665de9ed8d1bd6a26e3bacd693070
я вот счетаю, что rust - язык для настоящих мужчин, которые не бояться анальных кар компилятора с его заимствованиями и лайфтаймамитак же я считаю, что все хейтеры этого языка - простые неосиляторы, которые своими вскукаречными потугами пытаются восстановить своё значение в этом мире, но мы то знаем (что они обычные кукаретики)
>>1339615Поддвачну. Я, вот, когда на других языках пишу, то такую хуйню горожу, аж самому противно, но не могу остановиться - конпеляется же. А тут как-то само получается стройно и почти красиво, я аж загордился чутка и блинов поел.
>>1339684для сексуальных меньшинств тоже найдется место в необъятных чертогах ржавчины. так что раздевайтесь и смажьте жёпу для компилятора
>>1339615>язык для настоящих мужчин, которые не бояться анальных кар компилятора ...Сплетаемся в объятьях братских. Крепкие руки крепкие тела обхватывают. Целуем друг друга в уста. Молча целуем, по-мужски, без бабских нежностей. Целованием друг друга распаляем и приветствуем. Банщики между нами суетятся с горшками глиняными, мазью гатайской полными.Зачерпываем мази густой, ароматной, мажем себе уды. Снуют бессловесные банщики аки тени, ибо не светится у них ничего.— Гойда! — восклицает Батя.— Гойда-гойда! — восклицаем мы.Встает Батя первым. Приближает к себе Воска. Вставляет Воск в батину верзоху уд свой. Кряхтит Батя от удовольствия, скалит в темноте зубы белые. Обнимает Воска Шелет, вставляет ему смазанный рог свой. Ухает Воск утробно. Шелету Серый заправляет, Серому — Самося, Самосе — Балдохай, Балдохаю — Мокрый, Мокрому — Нечай, а уж Нечаю липкую сваю забить и мой черед настал. Обхватываю брата левокрылого левою рукою, а правой направляю уд свой ему в верзоху. Широка верзоха у Нечая. Вгоняю уд ему по самые ядра багровые. Нечай даже не крякает: привык, опричник коренной. Обхватываю его покрепче, прижимаю к себе, щекочу бородою. А уж ко мне Бубен пристраивается. Чую верзохой дрожащую булаву его. Увесиста она — без толчка не влезет. Торкается Бубен, вгоняет в меня толстоголовый уд свой. До самых кишок достает махина его, стон нутряной из меня выжимая. Стону в ухо Нечая. Бубен кряхтит в мое, руками молодецкими меня обхватывает. Не вижу того, кто вставляет ему, но по кряхтению разумею — уд достойный. Ну, да и нет среди нас недостойных — всем китайцы уды обновили, укрепили, обустроили. Есть чем и друг друга усладить, и врагов России наказать. Собирается, сопрягается гусеница опричная. Ухают и кряхтят позади меня. По закону братства левокрылые с правокрылыми чередуются, а уж потом молодежь пристраивается. Так у Бати заведено. И слава Богу…
>>1339696Блин, начал читать и думал мож как переделал забавно, а там просто цитата (хотя автор великий, конечно, как и повесть).
>>1339683Со сметаной и творогом - заебок. Ещё чай зелёный покрепче, с вареньем кислым.Аноны, у кого-нить есть пример кода/крейта для многопоточного заполнения вектора строго по индексам? Сам примерно знаю, как сделать, но боюсь подводных граблей, да и велосипедить не охота.
>>1340003Мьютексы в моей задаче оказались только помехой, зря время потратил. Потом вообще непонятно, как из них данные раззалупливать - оригинал под обёрткой остаётся мувед, дроп не спасает. Если кто знает, поясните, плз, вдруг таки буду их юзать.Сделал проще: в тредах возвращаю тупл с индексом и данными, а потом получаю в главном через джойн и впендюриваю по индексу. Впендюриваю тоже как-то чрезжопно, приходится сперва забивать result_vec "пустыми" значениями, если кто знает лучший путь, буду рад.for t in threads { let (idx, res) = t.join().unwrap(); result_vec.swap_remove(idx); result_vec.insert(idx, res);}
...а если такfor t in threads { let (idx, res) = t.join().unwrap(); result_vec.swap_remove(idx); result_vec.insert(idx, res);}
...ну а такfor t in threads {____let (idx, res) = t.join().unwrap();____result_vec.swap_remove(idx);____result_vec.insert(idx, res);}
>>1339917>Аноны, у кого-нить есть пример кода/крейта для многопоточного заполнения вектора строго по индексам? Сам примерно знаю, как сделать, но боюсь подводных граблей, да и велосипедить не охота.Но нахуя? Многопоточность - это когда у потоков изолированные данные и взаимодействие онли через ридонли-сообщения. Привыкай, сейчас на десктопы уже НУМА в лице тредрипера от амуде поперла и дальше будет только хуже, техпроцессы закончились и старая добрая SMP архитектура с одним пулом и контроллером оперативы уходит в прошлое.
>>1340497Нужно перемолотить некоторое количество наборов данных и сложить в массив в строго определённом порядке. Однопоточно проблем нет - делай push и все дела.
>>1340620https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=6ea086527730953ae4350992919a549b
>>1340691>answer = result;век живи - век учись. Сколько примеров не смотрел, видел заполнение векторов только через push. В остальном я практически так и сделал, только через return. Ещё такое - ты про join просто забыл или там какой-то фокус, что он и не нужен?
>>1340704Джойн нужен если ты хочешь дождаться завершения выполнения треда. В моем случае мне это не нужно, т.к. мне важно получить значения, что происходит через канал.
>>1340715т.е. rx.recv() ждёт завершения? Тогда это тот же джойн. Пока я вижу смысл rx/tx в построении каналов между дочерними тредами, использовать это в главном выглядит излишеством.
>>1340620А почему бы не использовать rayon? Он же специально для такой хуйни заточен. https://github.com/rayon-rs/rayon>>1340691В rayon'е можно сделать в одну сроку:let answer: Vec<usize> = (0..(num_threads as usize)).into_par_iter().map(|i| do_some_stuff(i)).collect()
Чё там с доступом к DOM API (и вообще WEB API) из wasm'а кто-нибудь знает?Я в курсе что его пока нет, но работа-то ведётся, черновики стандарта какие-нибудь есть?
>>1340843> Чё там с доступом к DOM API (и вообще WEB API) из wasm'а кто-нибудь знает?Называется оно WebAssembly Host Bindings.> Я в курсе что его пока нет, но работа-то ведётся, черновики стандарта какие-нибудь есть?https://github.com/WebAssembly/host-bindings
>>1340832>rayonЕдрить, оверкилл. Я тут >>1340303 сильно протупил - у меня же есть вектор с тредами, которые уже отсортированы, поэтому push в вектор с результатами будет идти в заведомо верной последовательности. А я, чёт, продолжал действовать так, как будто последовательность произвольна (как было бы при заполнении данных изнутри треда).
>>1340907Потому что оно сильно увеличит время компиляции, хотя вместо этого можно просто написать 3 лишних строчки кода. Вот если ему надо много таких штук делать, тогда есть смысл взять либу.
>>1340918> Потому что оно сильно увеличит время компиляцииНет, не сильно. Это ж тебе не C++ с шаблонами. Вот у меня в небольшой программе с rayon'ом:Finished release [optimized] target(s) in 11.57s
>>1340921> Compiling no-rayon v0.1.0 (/tmp/no-rayon)> Finished dev [unoptimized + debuginfo] target(s) in 0.48svs> ... rayon ...> Finished dev [unoptimized + debuginfo] target(s) in 4.11sВпрочем это холодная сборка после cargo clean.После первой компиляции оно одинаково быстрое. Разве что CI бесить со временем будет, что вряд ли значимо в данном случае.
https://www.amazon.com/Rust-High-Performance-performance-applications/dp/178839948XЧитал кто-нибудь? Как вам?
>>1340907Мне больше нравится писать ванильно. Это, конечно, збс, что карго вот так легко позволяет подключать крейты, но если использовать эту фичу слишком интенсивно, проект станет похож на нодовый с крейтами уровня left-pad и isarray.Кстати, даже логика rayon примерно та же, что у многих нодовых модулей - добавляет новые функции (into_par_iter, par_iter) для существующих структур. Я так погляжу, разрабы раста многое подсмотрели у жс и у ноды.
>>1341021Кек. Нет, братишка, манки-патчинг из жс-дристни ничего общего не имеет с тем, что делает rayon.
>>1341021> Кстати, даже логика rayon примерно та же, что у многих нодовых модулейТы наверное кроме C++ ни на чём не кодил. В C++ действительно другая крайность, что подключение любой библиотеки, кроме header-only превращается в ад. А так подобное есть в любом современном (и не только) языке. В той же жаве очень удобная система пакетов. У C# тоже.
>>1341024Их убогое vs наше великое. А суть та же - куча зависимостей тянет кучу зависимостей, каждая из которых экономит в среднем 7 строк кода на проект.
>>1341080Ты же даже не понимаешь о чем речь, правда?Я говорил о разъебывание прототипов которое глобально видно всем, а не о количестве зависимостей.
>>1341089А я вообще не об этом, а о том, что порочна сама идея подключения внешнего модуля ради экономии пары строк. Что где-то оно хуёво реализовано с технической стороны, это уже частности.
>>1341096Если впадать в крайности в стиле нпм, то конечно порочна. Впрочем подход goвна, где в каждом проекте копипаста min/max и прочих вещей не намного лучше.
Анон, зацени, как можно сделать. Умный конпелятор сам понял, что итерировать нужно до окончания конечного итератора (cycle() делает бесконечный) - охуеть.Например, такое нужно для суммирования сигналов со сдвигом по фазе.
Блецкий педоRust не дает засунуть мутабл борроу и ссылку в одну область видимости поэтому в loop input из консольки и insert в хэшмапу не получается.
>>1341926А теперь то же самое, но согласованными предложениями.https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=6b744d80e281f850b52345e9fdfef379
>>1342017я не он, но проблемс в том, что если нужно как-то модифицировать ввод, а не напрямую кидать в хэшсет, канпелятор шлет нахуй
>>1342116Я тоже не он, но не вижу проблемы.https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2f180525e572fab0fb770765b9280cd0
>>1342116https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=093cfdd97d4c7697f767b34c1aa2b24c"Ввод с консольки" и "Модицифированный ввод" - это разные сущности по семантике. Значит, имеет смысл положить их в разные переменные. Если будет что-то парсить in-place, ты заколебешься абсолютно в первом же нетривиальном случае. Проще сделать новый объект FP-параша стайл.
>>1342324>>1342331он не я, но я пытался рассказать про ошибку, которая случается из-за несколько других вещейвкатываясь из .NET, сложновато держать в голове все это borrowing/owning, а потом еще пытаться доказать компилятору, что все это должно работать по идее
>>1342331Сначала хотел написать что незачем создавать новую строку doubled_input, ведь можно модифицировать input.Но не смог запушить в строку саму себя:https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=fcfd5d7e1ce67d9b9a75bdfbab4d9739inb4: repeat, format! - они создают новые строки.
>>1342495> ведь можно модифицировать inputЧтобы сделать длинную строку, нужно выделить под неё память и скопировать данные из маленькой строки. Когда ты в плюсах пишешь что-то типаstring a = "qqqq";a += a;Ты по сути делаешь то же, что и в случаеstring b = a + a;Только деструктор a вызывается раньше. Никакой "модификации" не происходит, нужно ровно такое же число операций.>>1342492Тебе, по идее, нужно определить input_name и input_department в теле loop. Сейчас они "поглощаются" на первой итерации при добавлении в словарь и становятся невалидными, поэтому компилятор и ругается.
>>1342494На самом деле нет. Там не сказано лезть в заloopу. Если убрать loop то задание решено.>>1342507Не прокатило.
>>1342507С++ практически не знаю, но из моих представлений при добавлении строки к строке происходит примерно следующее:1. Проверяется capacity строки и если памяти уже выделено достаточно то строка-аргумент сразу копируется туда. (Т.к. пямять под строку при первоначальной аллокации/реалокациях, насколько я понимаю, выделяется с запасом.)2. Если недостаточно - по происходит реаллокация памяти, причём, вроде как, перенос строки в другое место при этом не обязательно происходит, т.к. может оказаться что свободное место есть и рядом.Так что эквивалентно это созданию новой строки только в худшем случае - и то наверняка в расте при полноценном создании новой строки больше действий выполняется.
>>1342528https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ee54faf2ed8a611974aaf053c09fd471
>>1342528Блять. trim возвращает слайс на строку, которая всё также умирает на следующей итерации. Нужно вставлять &input_name.trim().to_string();Но это говнокод, вынеси тримнутые строки до match, а в самом match используй их без взятия ссылок.let input_name = &input_name.trim().to_string();...hm.insert(input_name, &department[0]);
>>1342551я, конечно, понимаю, что это не самое сложное задание, но по книге такая хуйня какfn parse<'a>(mut words: impl Iterator<Item=&'a str>)еще неизвестна
>>1342704Мне просто было жалко аллоцировать память.Можно было бы сделать split_whitespace().collect::<Vec<_>>()и дальше работать уже с вектором вместо итератора.
https://pastebin.com/SRS5P0yK.clone(), .clone(), .clone()по большому счету, не считая логгирования, я использую dept и empl только по разу. как заставить компилер понять это и не рассказывать мне про borrowing?(или ЧЯДНТ)с другой стороны, насколько такой клонинг убивает перфоманс? (inb4 я из управляемых языков, там вообще похуй на такую парашу)
>>1343073>>1343065А, понел. У мя же мап указан что только ссылки берёт. акаlet mut hm: HashMap<&str, &str> = HashMap::new();
>>1343077Спасибо .Понятен даже стал весь код. С твоей выдержкой можно медбратом в дурке работать или учителем в спец. интернате для отсталых.
Можно ли делать на ржавом делать биндинги для пистона так же как на плюсах? Думаю какой второй язык взять
>>1343046тебе ж компилятор подсказывает что делатькак вариант, передавать input_name[..], что создаст &str по значению равный оригинальному String
>>1342942> как заставить компилер понять это и не рассказывать мне про borrowing?Ну так ты если сначала переместишь dept и empl внутри своих and_modify, то все, нет больше твоих переменных. Все правильно. > с другой стороны, насколько такой клонинг убивает перфоманс?Не ебу что ты там клонируешь, так что тяжело сказать.> я из управляемых языков, там вообще похуй на такую парашуУгу, а потом бекенд, на котором сидит 2 пользователя, не влезает в гигабайт памяти.В твоем коде можно просто перенести println! выше, до workplaces, все равно код до него дойдет, а println! не захватывает переменные, так что ты сможешь ими далее воспользоваться.Ну и вообще у тебя как-то странно сделаны твои .entry, .and_modify, .or_insert.
>Язык не поддерживает утечки памяти и с полностью безопасной работой с памятью.>Пытаешься линкануть сишную либо, так как писать функционал готовой либы дольше самого клиентского приложения.>Получаешь утечки памяти и сегфолты из-за скрещивания ежа с ужом.
>>1343739>>Получаешь утечки памяти и сегфолты из-за скрещивания ежа с ужом.>Не используй сишные либы с утечками памяти и сегфолтами. Проблема решена!
>>1343485> Все правильнону, я понимаю, что всё правильно, мне еще это компилятор рассказывает к тому же.но вот как я вижу работу кода с .entry().and_modify().or_insert(): я получаю значение empl из хэша по ключу dept, потом либо изменяю его в and_modify или помещаю новое в or_insert, т.е. тут однозначная вилка в логике. но при том, что эти два вызова находятся в одном скоупе, компилер видит захват в and_modify, и потом переиспользование в методе выше его не устраивает по вполне разумным причинам.в моем случае все эти значения - строки. конечно, неприятно копировать/клонировать все по паре раз,но как-то жить можно. а если бы это были чуть более сложные структуры данных (или не поддерживающие клонирование), то чтобы использовать одно поле для двух разных методов в логике, мне приходится приседать и выдумывать какую-то дичь (или мне так кажется с моим опытом уровня laba2.rs)> не влезает в гигабайт памятипредпоследний кастомер очень сильно удивился моим импрувментам дабы сервис не сожрал чуть больше имеющегося памяти, в коде, говоря: ну, пару гигов свурху можно и потребить, мы-то не сильно паримся по этому поводутак, что да, лул, такое нынче пишется говно
>>1343821> то чтобы использовать одно поле для двух разных методов в логике, мне приходится приседать и выдумывать какую-то дичьif let entry = hm.get_mut(){entry.push(string)} else {...hm.insert(...);}Интерфейс and_modify добавили ради какой-то монадической НЁХ, но никто не запрещает пользоваться классическим интерфейсом, если он тупо удобнее.
>>1343821А, блин, это Entry API, вообще забыл про него. Ну тогда короче, замени or_insert на or_insert_with (чтобы дефолтное значение генерировалось только если реально надо). Тогда пофигу, что везде clone, ибо оно будет реально выполняться только если будет вызвана соответствующее замыкание. Или можешь сделать так:*(workplaces.entry(dept.clone()).or_insert_with(|| Vec::new())).push(empl.clone)Ну и все еще если хочешь избавиться от clone, перетащи println! выше.
сап двач. Пишет школьник почти 16 лвл. Решил вайти пару месяцев назад, все это время теребил книгу по плюсам (даже прошел половину). Пару дней назад голову ударила моча и понял, что плюсы к тому моменту когда я попиздую работать (это лет через 5-6) плюсы вымрут и везде где можно будет раст. Решил сейчас задрачивать матан и вкатываться в хасскель в целях апа инты. Через год буду выбирать что задрачивать. Ваше мнение по поводу того выстрелит ли раст, аноны?
>>1344559Он уже выстрелил. Даже на hh.ru уже есть вакансии не про крипту. Так что к тому моменту как ты попиздуешь работать предложений будет с головой.
>>1344561В гейропе аналогично будет? Собираюсь в чехии учиться, а это, вроде, голубая карта и нахуй возвращаться. И еще, ты уже работаешь на расте или у вас его юзают (чисто для справки)?
>>1344620Лабаем фин-тех штуки. Ничего особенного. По сути набор сервисов которые делаю всякие вычисления и набор апи для этого.
>>1344767Я не он, но отвечу. Потому же, почему и жаба - из-за относительной строгости языка руководству проще быть уверенным, что армия макак-подчинённых не наговнякает.
>>1344785ну чет основная масса софта, судя по такому ответу, как раз ожидает наговняканый продукт от индусов, вместо эффективно работающего приложения
>>1343814>>Не используй POSIX и WinAPI, а еще >100 000 либ системного и прикладного уровня. >> Когда предложил работодателю, меня уволили.
>>1344767Потому что модно-молодежно.Сложно на самом деле ответить почему решились, меня в тот момент не было. С технической точки зрения выбор очень удачный.
>>1344792>наговняканый продукт от индусовДак индусы как раз и говнякают на жабе по этой самой причине, что в ней всё относительно (того же бидона или сей) строго и иерархично. Например, белые господа могут проектировать интерфейсы, оставляя грязным индусам реализацию.>>1344828Да лан тебе ёрничать, не всё так плохо. Раст изначально заточен быть в упряжке с Ц/Ц++ софтом, т.к. прямо сейчас, например, код на расте работает в таком виде в фуррифоксе.
>>1344828Ни разу не сталкивался с сегфолтом внутри ни одной сторонней либы, не говоря уже про POSIX и WinAPI. Они этого добиваются обычно месяцами и годами ебли, но результатом остаётся просто пользоваться.
>>1344935>Раст изначально заточен быть в упряжке с Ц/Ц++ софтомПока все либы не перепишут на раст, будут в упряжке, так?
Такой вопрос. Есть метод для структуры, который должен возвращать Option<&T>. Как из него вернуть ссылку на вот этот дженерик(он - поле другой структуры бтв), обёрнутый в Option<Rc<RefCell<Ещё_одна_структура_нейм<...>>>>? Что ни делаю, компилятор ругается либо на то, что возвращаю ссылку на локальную переменную, либо 'cannot move out of borrowed context'. Что делоть? Как это вообще должно выглядеть. Код на пикриле. Что он говно, я знаю.
>>1345087http://cglab.ca/~abeinges/blah/too-many-lists/book/Вообще перестань заниматься хуйней. Хочешь списки, пиздуй в haskell/lisp/erlang.
>>1345751как с IntelliJ живется? я привык в Visual Studio, но там, судя по вики, поддержка раста практически нулевая
как работают аттрибуты в расте?ну вот я добавил #[derive(debug)] и почему от меня больше ничего не требуется?если это сахар для компилятора, который распарсит поля и вытянет все в строку, то, например, растбук предлагает написать такую еболу: #[derive(PartialEq, Debug)]. есть какая-то дефолтная имплементация PartialEq?
>>1327089 (OP)>Вебня>http://www.arewewebyet.org/>Can I replace my Rails/Django/Flask already?>Well, probably not yet.
>>1345955Живу в емаксе, зависимость есть. rls конечно то еще дерьмо, но щито поделаешь.Жабоподелие тоже кривое-косое. И не менее тормозное чем студия на проектах больше привет_мир.
>>1345970Работают через макросы. Если интересно как конкретно поищи в сорсах стандартной либы эти макросы.
>>1345970https://doc.rust-lang.org/1.26.2/unstable-book/language-features/proc-macro.htmlhttps://doc.rust-lang.org/beta/std/cmp/trait.PartialEq.html
>>1345970Ну или почитай доку:https://doc.rust-lang.org/std/cmp/trait.PartialEq.htmlThis trait can be used with #[derive]. When derived on structs, two instances are equal if all fields are equal, and not equal if any fields are not equal. When derived on enums, each variant is equal to itself and not equal to the other variants.>>1345996-кун
>>1345976Ну а чего ты ожидал? Может у C++ есть такие рич-веб-фрейворки с темплейтами и прочей хуйнёй? Скажи спасибо что хотя бы уже>If your service primarily provides an API to be consumed by other computers, requires little external services and you are happy with writing most SQL yourself, then Yes, You Can!Кстати, а что с этим всем у goвноедов? У них есть аналог Джанго/Фласка?
>>1345998>https://doc.rust-lang.org/1.26.2/unstable-book/language-features/proc-macro.html>1.26.2Плиз, когда гуглишь доки раста - ищи ссылку на актуальную версию.
есть какая-нибудь практическая польза от возврата экземпляра типа Self? ну, не думаю, что это все ради "мне впадлу писать название типа, давайте засахарим"
>>1346375ну замени -> Self на -> Mamkoo, нихуя не изменитсяразве что в конструкциях типа impl<T: Govno> Pahom for T { }, но я не уверен, что там не будет подводных камней
После понятного пистона код на расте смотреть просто невозможно. Вы долго привыкали к нему после перехода с других динамических языков?
>>1345976>>1346059Зачем в вебе эти поделия когда есть суперразвитый зрелый с кучей либ Rails? Для кого важен перформенс - Elixir/Phoenix.Зачем?
>>1346550>>1346550Хуй поймёшь, зависит от конкретной задачи и читов. В целом по тем игрушечным бенчмаркам,что я видел разницы почти нет.
>>1346550Чтобы "выжимать" перформанс, в любом случае нужен ассемблер. Но даже это 3% кода. Для всего остального единственные важные свойства - отсутствие рантайма и GC. На плюсах у тебя тупо не будет времени оптимизировать свой код, потому что ты будешь отлавливать баг UB. А USB не станет работать быстрее потому что ты экономишь 10 тактов на проверке границ, когда делаешь системный вызов.
>>1346414Популярные веб-фреймворки спиздили кучу фич у рельс, настолько, что затраты на изучение нового языка перестает быть столь выгодным. А поскольку есть уже множество готовых погромистов на пыхе\пистоне, то легче выучить один фреймворк.Ну и еще устоявшееся мнение, что рельсы уже все, а руби это фреймворк одного языка
>>1346743Мне кажется что рельсы достигли такого уровня, что дальше развиваться особо некуда уже в рамках их предметной области (блогов за 15 минут кек). Поэтому и "всё".Сам сейчас подумываю с рельсов на Элексир/Феникс попробовать перейти, т.к. другая парадигма, на порядки лучший перформанс - это открывает новую предметную область. Плюс эта платформа используется в продашкене какое-то время, уже проверена.Но зачем кому-то еще один веб-фреймворк на Расте? Потому что ты фанбой Раста? Быть фанбоем одного языка в 2019 не вижу никакого смысла. Объясните, чего я не догоняю?
>>1346763Веб-фреймворки делают под все языки, даже под С. Хуле ты тут спрашиваешь? Иди спроси у авторов этих фреймворков.
>>1346854Авторам фреймворков может быть тупо по-фану, или фанбои своих языков. Я хочу спросить у людей, которые делают выбор между фреймворками. Свой выбор я описал.
>>1346767Два чаю, он офигенный. Просто пишу на нём на работе и радуюсь жизни. Единственное плохое только то, что эти ощущения приходится совмещать с кучей легаси на пхп и версткой.
>>1346880Хуй знает что там офигенного. Интеллисенса из-за дигамикодрисневости нет, какие там методы у объекта - хуй поймет, лезь в документацию.
>>1346888Т.к. в хорошем коде (а в Руби мире культ хорошего кода) у объекта не бывает много открытых методов, то их можно все держать в голове, а лишь изредка залезать в доку меня напрягает.С другой стороны, получаешь мощное метапрограммирование (отдельный лайк за простую реализацию DCI), отсутствие тонн бойлерплейта, красивый DSL для тестирования, консистентность, выразительность и изящность.Я бы уже и рад перейти на что-то другое для смены обстановки, но Руби так хорош.
>>1346899То есть апишку любой новой библиотеки нужно сначала выучить как стишок, чтобы держать в голове? Такое себе удовольствие.
>>1346908Ну ты ж не будешь по интелисенсу изучать новую библиотеку. Если это библиотека API какого-то сервиса, ты изучешь раз, напишешь враппер с двумя-тремя публичными методами и больше не думаешь о деталях реализации.Можешь привести свой контрпример, аж интересно.
https://code.visualstudio.com/updates/v1_31#_removed-legacy-search-modeОказывается растовский ripgrep используется в vscode, давно уже.Раст - нужен.
>>1346931Ну падажжи, каждый написанный тобой враппер ты должен в голове держать?А интеллисенс очень облегчает использование новой библиотеки, с ним в доках ты читаешь о принципах и основных объектах, детали же тебе подсказывает интеллисенс прям во время написания кода.
>>1346957Почему каждый, только те с которыми работаешь вот сейчас.Я не спорю что интелисенс удобен, но это разумная плата за метапрограммирование кмк.Если работаешь с объектами, у которых 100500 методов, необходимость интелисенса повышается. Если в ходу single responsibility principle, и программирование - это по сути композиция, то понижается.
>>1346899> в Руби мире культ хорошего кодаКак-то (в ~2009, охуеть) прикручивал к тикетовке (типа багрепортилка для дежурных админов на хостинге) жаббер-бота, чтобы на мессаги оперативно реагировать. Это был единственный мой опыт на руби и оно даже работало. Дак я там такого наговнякал, страшно вспомнить.Хорошо, что в Руби мирке никто про это не узнал, а то вломили бы пизды - мама не горюй.
>>1346966Я не говорю выучить, я говорю держать в голове. Не работая с конкретной кодовой базой, ты эти 20 методов забудешь через какое-то время. Когда я переключаюсь на задачу из другой области проекта, я стараюсь из своей памяти выгрузить инфу по прошлой задаче, которая сейчас мне не нужна.Разница в том, что во втором случае информация структурирована, и воспринимается легче. Это одна из причин, по которой ООП > процедурного.Кстати, для Руби есть IDE RubyMine с автокомплитом, не знаю насколько умным, и только что загуглил - экстеншен для VS Code, пикрелейтед.Но Ruby это не PHP, где надо постоянно вспоминать в каком порядке аргументы в array_search, а в каком в strpos. В Ruby действует Principle of Least Surprise.
требования в растовакансии:>Multithreading and Asynchronous conceptsв растбуке не нашел чего-то, отдаленно напоминающее асинхронность (в понятиях .NET, nodejs, etc.). это копипаста не очень умной хрюши писанины не очень умного челебоса, или какое-то приблизительное подобие асинхронности в rs все-таки есть?
>>1347733Корутины - это всего лишь приятный сахарок для асинхронности. В том же node.js (да и в js вообще) и .NET асинхронный код можно писать и на промисах (в .NET они имеются тасками) или коллбеках.
>>1347733В растбуке есть про Send и Sync, про Arc<T>, мьютексы, треды и каналы, но в вакансии может имеется в виду в целом. Может там тебя на собесе про STM cпросят. Я чёт охуел с того, что треды не напоминают тебе об асинхронности и мультитрединге. Выросло, блять, поколение, не нюхавшее pthread.h.
>>1347815в моем понимании асинхронность - это не держать тред ожидающим ответа от какого-то не очень быстрого источника информации (жосский диск, БД, сеть, etc.), а суметь сделегировать ему какой-то кусок другого многопоточного кода (или убить нахуй). ну, это идея в .NET такая, как минимумArc я не трогал, а про Send/Sync читал по-диагонали. я не говорю, что в буке нет такого, а то, что я - дуанне нашел. но есть повод потеребить главы заново
>>1350974все обозримые вакансии - криптохуй инженерпробоваться на такое чисто ради получения представления о релевантных знаниях
>>1351046Да не, меня тут с веб-хуйни отфутболили. Не хотелось бы раскрывать подробности, тк. наверняка в треде я не один такой. Ещё выясним, что ухлёстывали за одной сучкой, и подерёмся.
Что пописать на расте, если у меня под рукой нет микроконтроллера? Покидайте идей, где можно применить многопоток. Все упражнения из шапки треда уже выполнил. Мимо гофер из соседнего треда хочет вкатиться в раст.
>>1352738Возьми какую-нить шнягу, которую писал ранее для себя/бабушки/лулзов и перепиши на расте.Алсо, всё то же, что пишется на го, пишется и на расте - они конкуренты, тащемта, что бы там не говорили.
>>1352738> Мимо гофер из соседнего треда хочет вкатиться в раст. Подожди пару месяцев пока они асинхронные функции хотя бы в ночнушке допилят. Иначе после ГОвна будет больно без корутин.
>>1327089 (OP)Если я интырпрайз программист, пишу на Котлине, чтобы не умереть с голоду КРУД к СУБД, но для себя хочу более быстрый и нативный хобби-язык (Котлин-нейтив очевидно не взлетит) в 2019 мне стоит смотреть на современные плюсы или раст? Других вариантов у меня нет, прально? (исключаем Хаскель и голанго-парашу)
>>1354143дай бог, раст пригодится где-нибудь еще кроме блокчейновибо в данный момент широкого пула применений для него нет
Растаны, кто в саблайме пишет? Как его пропердолить, чтобы линтер с clippy был и автокомплит? RustEnhanced если checked на clippy поменять говорит "failed" и не выводит в лог никаких ошибок, хотя сам клиппи нормально работает. Anaconda_rust просто нихуя не делает, хотя я всю нужную ей муть поставил, сорцы тоже, пути добавил.
В расте не запилили for..else? Гуглю и вижу только бугуртящих неосиляторов этой божественной конструкции из пайтона. Нет, скажите, лишнюю переменную заводить, потом её изменять, а потом после цикла проверять действительно проще и удобней?
>>1355965> водить, потом её изменять, а потом после цикла проверять действительно проЯвное лучше неявного.
>>1355965>for..elsehttps://github.com/rust-lang/rfcs/issues/961пообсуждали и отказались. Нельзя притащить в язык весь существующий в мире синтаксический сахарок, не притащив вместе с ним косяки, присущие уже содержащим его языкам. То, что есть сейчас, уже очень сахарно, по сравнению с сями/плюсами, уж точно.
Поясните как преобразовывать принято числовые типы друг в друга? Вот u32 -> f64: f64::from(chislou) или chislou as f64? А наоборот f64 в u32?
>>1356749Почему не сделали единообразно? Зачем для int->float рекомендуют from, а для float->int - as?
>>1356755https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=eec5e9fd16a90003cf1b45215759b975
>>1356763Йеп. Заметь что для f64::from(u32) естьhttps://doc.rust-lang.org/std/primitive.f64.htmlА u32::from(f64) нетhttps://doc.rust-lang.org/std/primitive.f32.html#method.min
https://blog.rust-lang.org/2019/02/28/Rust-1.33.0.htmlif, кстати уже завезли в const fn или еще нет? И если нет, то планируют ли?
>>1357075Не завезли. Вот этот RFC https://github.com/rust-lang/rfcs/pull/2342 выглядит как самое близкое к этому. Да, там не про if в const fn, но кажется, что если этот RFC примут, то и в const fn завезут быстро.
>>1359104В vscode без указания типов не всегда комплитится, больше ничего не могу сказать. мимо-написал-хеллоуворлд-на-расте
>>1359104По сравнению с джавой очевидно он хуже, но в отличии от джавы писать на расте без иде вполне себе можно.https://areweideyet.com/
>>1359195Когда лень создавать отдельную функцию, в которой можно из цикла просто вернуть найденное значение, а после цикла выполнить что-нибудь или вернуть дефолтное значение.Или вот нагрепал код, где это используется, но тут определенно не хватает меток для циклов, чтобы выйти из вложенного.
>>1359200В расте подобное не пишут, потому что чаще всего у тебя будет нормальный функциональный код с итераторами, а не процедурная параша.
>>1359206Объясни что на скрине происходит. Без типов решительно невозможно разобраться.Что такое `aliases & d.keys()`? и какой тип у key?
>>1359207>какой тип у key?я мимо, но какая разница? я так понял, дело обстоит с ассоциированным списком. чем бы тот key не был
>>1359207aliases_map это словарь, где у каждого ключа (str) есть синонимы (set of str), например:{"id": {"identifier", "sid"}}Функция принимает словарь d, который может выглядеть как {"sid": value} и как {"identifier": value}, и возвращает {"id": str(value)}. Попутно вытаскивая первое значение, если value является списком, а также проверяет, чтобы все ключи из aliases_map были на месте.> aliases & d.keys()Это пересечение aliases и d.keys(), то есть {"sid", "identifier"} & {"sid"} вернет {"sid"}.
>>1357320Этот RFC уже приняли (почти год назад, лол). Надо смотреть issue в репе самого раста: https://github.com/rust-lang/rust/issues/49146
>>1356755Хотят добавить универсальный TryFrom [1]. Но там свои проблемы с never type [2].[1]: https://github.com/rust-lang/rust/issues/33417[2]: https://github.com/rust-lang/rust/issues/57012
>>1359200https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2d460eb8bb303b44da87582da7287210Что-то типа того. Сам пример не скомпилится в песочнице, потому что maplit недоступен %могли бы и добавить, конечно%, а мне лень переписывать.Сначала думал сделать через HashSet::intersection как в пиздоне, но это настолько катастрофически неэффективно и неявно, что плюнул и сделал по простому.
>>1359264>думал сделать через HashSet::intersection как в пиздоне, но это настолько катастрофически неэффективноВнезапно нашлось такое:https://stackoverflow.com/q/35439376/521590В одном из ответов рекомендуют заменить хэш функцию, это помогает, но все равно медленнее твоего варианта.
Что это означает [server]? Бывает еще такое #[derive(Deserialize)]. Пример кода:[server]ip = "127.0.0.1"port = "30080"tls = false[log]actix_web = "debug"webapp = "trace"[postgres]host = "127.0.0.1"username = "username"password = "password"database = "database"
Посмотрел https://learnxinyminutes.com/docs/rust/ и немного удивлен. В нем реально так мало синтаксиса или не все описано? Для сравнения Эрланг, в котором реально очень мало синтаксиса https://learnxinyminutes.com/docs/erlang/ чуть меньше текста + большая часть комментарии.
>>1360612Не пизди. Это процедурные макросы. Никакого наследования в расте нет. Они вообще могут делать почти всё что угодно.Конкретно макрос Deserialize из Serde [1], добавляет трейты для десериализации объекта.[1]: https://github.com/serde-rs/serde
>>1360617>Никакого наследования в расте нетimpl T for S {}только в случае с [derive] итоговое поведение определяется тем самым макросом. используя impl for реализацию выдумывает писарь
>>1360619Трейтам в расте для полноценного наследования не хватает как минимум двух вещей:1) Полей в трейте. Проче говоря, сейчас все треты stateless.2) Возможность вызова родительского метода при имплементации трейта. Проще говоря раст не создаёт vtable для методов трейтов. https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=59bde35749b208dc8d3f8a7829a26304
>>1360625естественно, я не говорю о строго ОО-шном наследованииэто наиболее полно (как по мне) объясняющий термин. я вообще не в курсе, если у impl какое-то определение. сам растбук говорит что-то вроде> to define implementations on types
>>1360687Не думал что на дваче можно встретить опытного лиспера. Есть ощущение что тут одни школьники и тролли.
>>1360641Бля, а у меня как раз на той неделе появилась идея запилить консосоле-клиент для скроллинга нулевой. Ну Татрикс как всегда, блин.
>>1360708На емакс-лиспе кучу всего писал. На го две кучи (мне конечно стыдно, но что поделаешь). На кложуре в основном всякие недоделки и на отправка всякого на синт через овертон. Общелисп какое-то время ковырял, даже по работе написал пару вещей, ну и для своих проектов. У нас общелисп сейчас на текущей работе прекрасно в проде крутится, хотя писал его не я. Ну и опенсурсный проект на общелиспе стал для меня билетом за границу, так что я не жалуюсь.
>>1360814надеюсь твоего ребенка выебут и зарежут муслимы, а твоя жена сгниет от рака :Pтак и будетда да
>>1360816>>1360813Анон, не заплачь только. Сходи водки выпей, подрочи, вебм-тред с бурятками полистай - глядишь и отпустит.
>>1360811кучу раз хотел вкатиться в лисп, ради прикола изучить кложур. другие языки тоже хотел подрочить. но нахуй этим всем заниматься, если практически всю эту мичпуху вокруг я не применю. а закордон мне неинтересенраст хоть более-менее начал взлетать. хоть он меня вдохновил на чуть более глубокое изучение, чем первая страница интродакшна
Сап экспертам в треде,есть микросервис на джаве который запрашивает один сайт, парсит респонс, делает небольшие вычисления и кидает месседж в redis pub-sub, другой сервис принимает. В худшем случае всё это занимает ~100ms. И задержка не в сети, а именно в парсинге респонса (парсинг HTML-a через jsoup) и вычислениях до того как я отправляю месседж в редис.Скажите, есть ли смысл переписать тот сервис на Rust?
>>1361146Кстати serde довольно таки тормознутый. JSON на 60 Мб serde парсит секунд 10-20, на питоне же меньше секунды.
>>1361146> все остальное будет казаться недоразумениемСомневаюсь что rust может предложить что-то лучшее, чем aeson в хаскелле или circe в скале.
>>1361146Окей, я уже попробовал serde, но так сходу сделать что-то работающее не получилось, пришлось все таки "the book" читать. Прошел пока половину, вот задумался стоит ли инвестиция времени того, может сильно быстрее и не будет, поэтому и вопрос.>>1361143Да наверное си быстрее будет, но раз уже такое дело решил новый модный язык попробовать >>1361155Ну надо вытащить данные из HTML-a, апи там нету, поэтому так. Или я не понял твой вопрос.
А что на расте написать можно? Сам занимаюсь мобилкой; на иосе и на ведройде пишу.борду смогу написать на нем?
>>1361269графоний есть адекватный для rust?не в смысле пердолинг на уровне pubg, а хотя бы на уровне формоприложения с каким-нибудь простейшим 2д
>>1361317>arewegameyetне удосужившись даже пролистнуть страницу, я посчитал, что это описание движка для гейдева. сункс
>>1362014интеллисенс работает через членнапример, у меня не подсвечивает бОльшую часть методов из стандартных библиотек и внешних модулей. что-то вродеvec!(1, 2, 3).puне заавтокомплитита так да
>>1362024Двачую, почти ничего не автокомплитит, а для новичка как я было бы неплохо все подсвечивать как в джаве
>>1362024Ну клиппи хоть работает в редакторе? А то каждый раз в консоль за ним лезть. В саблайме сколько ни ебался, так и не понял, почему не работает.
>>1327089 (OP)Возможно стоит добавить с следующую шапку:https://scanlibs.com/hands-microservices-rust-scalable/
Там GOспода уже перекатили тред про лучший язык в мире. Догоняйте. В шапку следущего треда можно добавить новость от now. > Starting today, we’re making it possible for you to deploy serverless Rust applications to Now with our official Builder, @now/rust.Теперь можно деплоить ваши невероятно быстрые программы на Rust в виде lambda-функций.https://zeit.co/blog/introducing-now-rust
>>1327089 (OP)Котаны, а есть нескучный синтаксис для раста без точек с запятой?Ну типа как ризон для окамла, только наоборот (и для раста).
>>1362919Не взлетит по двум причинам.Первая: точка с запятой превращает expression в statement (то бишь подавляет возвращаемое значение).Например этот код скомпилируетсяfn asd() { 20;}а вот этот нет:fn asd() { 20}потмоу что компилятор будет жаловаться, что функция должна возвратить '()' (пустой тип), а ты пытаешься возвратить '{integer}'.Вторая: макросы. Для поддержки этого диалекта раста придётся переделывать все макросы во всех крейтах, ибо они на входе будут ожидать валидный растосинтаксис (а из-за первой причины тебе придётся грамматику раста кардинально переделывать, чтобы убрать точки с запятой).
>>1362024Idea + rust plugin вполне предоставляет навигацию по библиотечному коду. Подсветка работает хорошо. На первый взгляд все как для джавы
>>1362961Чет ты аутизм какой-то выкатил. Я спрашиваю про компилирующийся в раст язык с нескучным синтаксисом, а ты какую-то дичь пишешь, извини.
>>1363043> Я спрашиваю про компилирующийся в раст язык с нескучным синтаксисомДо такой хуйни из жаваскриптомирка ещё никто не додумался. Будешь первым. Были те, которым точки с запятой пиздец как мешают кодить, но их методично посылали нахуй.
>>1363055>До такой хуйни из жаваскриптомирка ещё никто не додумался.Почему? Я вроде несколько растоязыков видел, но в основном они слишком сильно меняли семантику (по крайней мере вариация на тему "динамический раст" точно была)
>>1363059> Почему?Потому что в отличии от остальных подобных языков о совместимости с 50% крейтов можно забыть, ибо макросы. Т.е. по сути ты теряешь экосистему раста, а значит и смысл строить новый язык поверх него.Хотя тот же котлин, например, компилируется напрямую в байт-код, а не в жаву, хотя и имеет совместимость с жавой.
>>1363079>Потому что в отличии от остальных подобных языков о совместимости с 50% крейтов можно забыть, ибо макросы.Ты опять какую-то хуйню несешь.
>>1363152Это ты хуйню несёшь, говна кусок. Тебе что нужно? Встраиваемый в раст язык у которого своя собственная стандартная библиотека, для которого ты просто делаешь некоторые АПИ, как например встраивают язык Lua или JavaScript? Или язык который сможет вызывать растовские функции и компилируется вместе с ним в один бинарник (как например сделали с Rust2015 и Rust2018 - по сути два языка, которые поддерживаются одним компилятором и могут спокойно взаимодействовать друг с другом)? Если второе, то тебе нужна стандартная библиотека раста и возможность использовать его крейты? Если да, то для этого нужна совместимость на уровне ABI (чтоб можно было вызывать эти самые функции) и совместимость синтаксиса, чтобы процедурные макросы могла нормально работать (а они получают и выплёвывают синтаксическое дерево).
>>1363059Лучше притащить ссылку что именно ты там видел.Если это что-то вроде http://www.piston.rs/dyon-tutorial/ то это просто отдельный язык и он не транспайлится/компилируется в раст.
>>1362919Научись понимать и принимать непривычный для себя синтаксис.Если ты не тупой, и если каждая мелочь синтаксаса обоснована, дизайн языка целостный, как в расте (а не легаси и наслоения протухающих костылей как в плюсах и js) - то ты без проблем свыкнешься с непривычным поначалу для тебя синтаксисом.
Сап растаны.Скалист в треде. В скала треде не сижу, что эти уважаемые/говноеды из себя представляют не знаю, прошу по ним не судить. Я тут поделюсь впечатлениями никому не нужными.Итак. Наверное ленивый не слышал про новенький язык системного уровня. Решил и я потыкать Rust. За плечами императивная жавка, славная Scala, немного хаскель. (ну и тыкал всякий хлам типа питона, жса).Краткие отрывки из описаний, статей - создают крайне положительное впечатление. Решил обмазаться. Обмазаться под винду, т.к. на домашней пекарне она, для игрулек.Скачал компилятор и тут понеслась.Он мне говорит скачай ебалу Visual Studio билд хуилд.Ладно. Скачал-поставил. Компилятор говорит "нееее. не поставил". Ладно. Я упорный. Пошёл перечитывать растосайт.Да говорят скачай ебалу и поставь галочку на с++. Какой С++? Я же поставил с++ билд тул. Вот же он. Ладно пошёл форумы курить. Ага там ещё есть С++ в списке. Ну ахуеть теперь.Это вы ребята проебались конечно с гет стартед и инсталлом. Стартовать не очень приятно было. Ну ладно. Вроде хелоу ворлд завёлся.Расчехлил растбук. Приятно написано. Вербозно конечно, но зато ничего не упущено.Решил обмазаться ИДЕ. Поделями жидбрейнс я сыт по горло. Решил попробовать что-нибудь другое. Поставил VS Code. Давай накатывать плагинчики. Плагинчики говорят накати ещё lldb. А ещё накати питончика - ты же хочешь дебажить? Погорел, успокоился и накатил.VSCode конечно лажа какая-то. Какой-то непонятный интерфейс. Ну ладно пока сойдёт. Подсветочка есть, билд сервер краснит, дока подтягивается. (оценил к слову локальную доку, собираемую из терминала. Кайф) Реквестирую советы какую ИДЕ ещё заценить.Написал вот guess_game. Всё понятно. Вот он паттерн матчинг, вот типы, божественная иммутабельность, АДТ (result же это адт?). Всё как я люблю. Многое очень похоже на скалу. Всё удобно, всё радует. Да конечно опять точки с запятой ставить, но ладно уж.В общем не смотря на рейдж на старте, пока всё идёт довольно весело и интересно.Куча вопросов к вам, бывалым. Всё конечно узнаю из растбука, но мне нетерпится. Что по тайп-классам? Я так понял тут так же через трейты это реализовано. Но в скалке ещё implicit учавствует в их образовании. А как тут? Что по функциональной парадигме? Вики говорит, среди прочего, это функциональный язык. Что по referential transparency? println! говорит о том, что не завезли FFI инкапсулированного в какую-то IO монаду. Хотя в скала так же, но у нас это допилено функциональными либами. Как вообще сообщество смотрит на уклон в сторону ФП?
>>1364315>ФПну вот я как-то так проверяю наличие файла в дире. Вроде достаточно функционально. Или что ты там имел в виду?
>>1364646вот этот верно говорит -> >>1364751. Ну почти. Не все на самом деле. Есть любители обмазываться императивщиной и сайд-эффектами. Но я из тех что объебошился, да.Ну я так понимаю - так выглядят лямбды. Функции как first class values хз как это по-русски сказать это конечно шаг в сторону ФП, но я про монадки, аппликативы и прочий теоркат. Соответственно и про higher kinded types. Да чтоб с частичным применением. Ну и есть ли карирование?
>>1364797>карированиеhttps://rosettacode.org/wiki/Currying#Rust - что нагуглилосьмонадки вроде прикручиваются сторонним трейтом + дефолтный OptionБольшинство перекатчиков на раст из мира императивщины, поэтому лучше ты сам нагугли и поясни, как оно обстоит в расте и чем отличается от скалы/хацкеля.
Аноны, а у всех навигация к макросу в vscode не работает или только у меня? В идее норм, "go to -> implementation" и приехали, а тут облом.
>>1365885В емаксе переход в функции крейтов и стандартной либы через rls работает через раз. Макросы не работают от слова совсем.
>>1367303Сделали, но не полностью. Иногда макросы отваливаются. Например, если лазить по исходникам других либ. А иногда не отваливаются
>>1367828https://rust-lang.github.io/rfcs/2471-lint-test-inner-function.html#guide-level-explanationну вот я загуглил твой мессаджа потом увидел, что у тебя весь код прямо внутри fn main()
>>1367829Спасибо, когда вытаскивал всё за мейн то оно ныло на нот фаунд из зис скоуп. Вообще странно что они пихают этот код в растбук наверна где-то пропустил объяснения в стиле "не повторяйте дома"
Где почитать про эти ваши референсы, борровинги? Не понимаю нихуя. Что ни напишу, компилятор кидается в меня хуями и грит что-нибудь вроде "cannot move out of borrowed content" и "cannot assign to immutable reference". Ну или если нигде нет, объясните хоть, что к чему, на примере указателей и ссылок в плюсах
Смотрите, аноны, как не надо делать: David Wang - пидор китаёзскийhttps://github.com/wangds/libbayer1. run_demosaic, который ни хуя не возвращает полезного, весь результат кадётся в заданный буфер. Но может выкинуть Err. Сука, я полдня убил, пока не обратил внимание на note от конпелятора и не сделал unwrap, которого даже нет в примере.2. Оказывается, размерность результата должна быть равна размерности равки, ну охуеть. А смысл тогда задавать её самому, если она очевидно выводится? Бля, ну что ему стоило создать буфер нужного размера самому и вернуть? Так он и сделал бы unwrap необходимым, и избавил юзера от лишних действий по выделению буфера заведомо известного размера. А так какая-то хуйня получилась, ей б-гу. И эта вот хуйня, единственное, что сейчас есть на расте для дебайерезации, rawloader её не умеет.
>>1369236>Бля, ну что ему стоило создать буфер нужного размера самому и вернуть?Если тебе нужно будет обработать 1000000 картинок, то выделение памяти отожрет заметную часть перформанса. Можно придумать что-то более элегантное, но это не случай "потому что могу".
>>1369246Ты о том, что можно задать один раз буфер под все 1000000 и потом нарезать слайсами? Вариант, конеш. Но unwrap() в пример он мог бы добавить, как и самостоятельно вывести размерность буфера из размерности равки (раз уж ему так сложно самому сделать сдвиг вправо на разность бит).
>>1369240>В растбуке.Читал поностью. Нет там ни фига про все эти хитрости. Да и код примеров там слишком примитивный.
ПЕРЕКАТhttps://2ch.hk/pr/res/1369496.htmlhttps://2ch.hk/pr/res/1369496.htmlhttps://2ch.hk/pr/res/1369496.htmlhttps://2ch.hk/pr/res/1369496.html