Это копия, сохраненная 15 апреля 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ИТТ мы можем объяснить базовые и продвинутые концепции языка, и
программирования в целом, поможем вкатывающимся, подскажем что
выбрать для веба, игр или спасибо абу блокчейна.
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/rust
https://github.com/crazymykl/rust-koans
Писать
IDE
https://areweideyet.com/
Вебня
http://www.arewewebyet.org/
Игры
http://arewegameyet.com/
Etc
https://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
Ржавую.
Взял вашу книжку полистать. Первая же угадайка поломалась:
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);
Да, жалуется, но поведение хотя бы запускается и делает что надо.
Что за хуйня?
>>27250
Обнаружил в чём проблема:
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 стало прям как по примерам генерировать всё.
1) Как системный ЯП, Rust медленнее, чем C. Причем, в одном случае вы будете ебаться со сложной системой управления памятью (аки защита от макак) , а в другом - с собственным говнокодом. Подразумевается, что системеный программист не макака и способен нормально организовать работу с памятью, без искусственных ограничений встроенных в ЯП.
2) Как прикладной ЯП неудобен (см. пункт 1). Невасянский GC не завезли.
Количество уязвимостей в коде твоего сферического системного программиста показывает что можно пожертвовать скоростью в пользу безопасности в общем случае. Впрочем, утверждение что одно медленней другого так же ничем не подкреплено.
Но ведь системное программирование не ставит своей целью сверхскорости. Это скорее побочный эффект с того, что С фактически является обёрткой над Ассемблером.
Дак ты, это, не с Цэ сравнивай, а с Цэ++. Быстрее сей бывает только ёбля голого ассемблера и фортрана.
Аноны, я и сам хуй простой, только вкатываюсь. Такой вопрос, как бы сделать
(a as i16 - b as i16).abs() as u8
но поизящнее? Нужно вычесть из одного беззнакового другое, получается только вот так топорно.
Хихикающая девочка-фротнендер? Заёбанный дядя-плюсист с пятью детьми? Школьник-максималист с комплексом великого провокатора?
Кто же ты, о чудо?
Реалист, мань
Раст это костыль на костыле с убогим синтаксисом. Даже для мк не попрогать на нем.
Ну а как бы ты вычел на ассемблере? Тут или распаковывать в знаковое, или вычитать из большего меньшее. Вот системность раста, как языка, она об этом. Вот тут даже хз, что будет шустрее, вроде бы на simd есть команды для сравнения и сортировки, так что и там, и там вариант со сравнением, скорее всего.
Ничего плохого если ты сам этим занимаешься. Не любят из-за товарищей которые в иссуях на гитхабе капают на мозги мол давай переписывай свою хуйню на раст, раст ебать топчик.
Почему ты пишешь имя Иисуса на английском языке?
Раст вообще развивается? Что там нового?
Просто часто слышу в разговорах, что раст застопорился. Расскажите кому не лень и кто шарит. Только подробно.
Хуясе застопорился. Недавно выкатили 2018 версию с кучей новых фич. В этом году ожидаются две большие фичи: корутины и константы в генериках. А так сами разработчики не хотят торопить события и сосредоточится на стабилизации и допиливании существующих фич, а не придумывании новых.
Ясно. Смотрел давно видос, что лысый из яндекса нахваливал язык. Сейчас где юзают его, в каких проектах/конторах?
>заглатывает и у це++
https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/c.html
у него и сишечка заглатывает, если так посмотреть.
Сперва был хайп, переоценка, теперь идёт откат. Таким маятником и устаканится отношение к нему.
Не срут же на джулию, с которой я на него вкатился, а она то ещё говнецо.
> Что-то я читаю всякие реддиты-медиумы-хакерньюсы в последнее время и замечаю , что люди прям срут на раст. И собсна вопрос, а чего нас так вдруг невзлюбили? Язык не особо чем выделяется, чтоб говном поливать. Растаманы не индусы, и не фронтендеры. Оглядел тред, тут тоже какие-то буйственные настроения. В чем хейт то пошел ? Я что-то пропустил ?
Разочарование, хотели чтобы язык кресты убил, а он в середине своего развития упоролся и чижика съел.
Ну и в первую очередь потому что хотелки нипалучились и устраивающей всех по фичам стабильной спеки ещё так и не вышло.
>Rust — невероятно быстрый язык
Такой быстрый, что в некоторых тестах даже медленнее C#
>regex-redux
>C# .NET Core 2.22
>Rust 2.44
Лол, я даже не глядя уже понял , с какого сайта бенчмарки такие идут. Интересно , сколько ещё клованов найдется , которые все его цитировать будут. В каждом ебаном треде о каждом ебаном языке, блять.
>[DllImport("pcre2-8", EntryPoint = "pcre2_compile_8", CharSet = CharSet.Ansi)]
Эх, щас бы сравнить встроенную библиотеку раста с сишной библиотекой регулярок от гугла и назвать это тестом перформанса раста вс шарпа ¯\_(ツ)_/¯
Дизайн языка плохой, рестриктивный.
Он не делает решение никаких задач проще. Запретили одну дырявую абстракцию, в итоге на расте пишут другие точно такие-же дырявую абстракции адресации памяти с точно такими-же багами.
А тебе кто-то запрещает использовать интероп в шарпе?
Наоборот, это преимущество языка. 90% кода пишутся на простом, высокоуровневом языке, а там, где нужна производительность, вынести в быстрые библиотеки.
Это всё очень хорошо, но это не будет показателем производительности C#, так что такие бенчмарки идут нахуй.
>Он не делает решение никаких задач проще.
Он делает проще задачу поиска проблем из категории buffer overrun, use-after-free и aliasing. Ничего кроме этого он не заявлял.
>Rust is fast
Not with the number of defensive copies or arbitrary synchronizations you need to make to satisfy the BC.
>Rust can easily integrate with other languages
No stable ABI
>Rich type system
No HKTs
No pi types
>guarantee memory-safety
Still trivial to leak memory with a reference cycle
>productivity
Enjoy fighting the BC more than doing actual work
На всё чем хоть кто-то пользуется срут все кому не лень, см. цитату Страуструпа.
Алсо, так же можешь посмотреть на коменты под новостями о новых версиях какого нибудь окамла (которых нет). Так что, наличие критики = используемость.
Че, неприятно? Язык не оправдывает своих ожиданий и разработчики нагло врут о якобы быстром языке.
К чему ты это пропердел?
https://github.com/rust-lang/rfcs/issues
https://github.com/rust-lang/rust/issues
хз, тебе что нужно-то? go, вон, вообще почти не развивается - а хипстеры жрут и добавки просят. Фич уже предостаточно, чтобы взять и пользоваться.
по поводу гомофобии, которая постоянно всплывает в растотредах
вы хоть понимаете, что это не только раста касается, а вообще всех новых технологий разрабатываемых в бездуховных геймерике и гейропе? где они преобладают, там и кок/сжв/лгбт будут как правило! и в таком случае вы предлагаете из-за этого тупо гасить всё новое оттуда или есть варианты получше?
Нечего там читать. "Я не осилил борроу-чекер, я хочу систему типов как в языках с гц, но с перформансом сишечки". Хотеть не вредно.
Борроу-чекер просто НЕ позволяет тебе писать быстрый код
Какой сейфти, если утечку памяти можно сделать через обычный референс цикл?
Какое компатибилити, если хуево поддерживается двоичный интерфейс приложений?
Ну и видимо, кроме hello world'ов ты сложнее ничего не писал, да и понятно почему, ты не смог заставить код работать из-за BC
Мань, ну вычитал ты где-то кукареки того, кто не разбирается в том о чем говорит, ну молодец.
Пруфа про связь борроу-чекера и скорости?
Мемори-сейфити != нет утечек памяти
Какая связь между гаратниями совместимости между версиями раста и ABI?
>Программировать на C++, разве там много LGBT?
сразу вспомнилась картинка двух программистов в леопардовой раскраске
не знаю как сейчас, но если для с++ предполагается приток новых программистов, то там будет также, ибо новые поколения молодых людей уже воспитываются в том духе, который неприятен гомофобам
что тогда будете делать?
Создадут нормальный язык. И в этом случае производительность программистов будет намного больше, чем на других, лгбтшных, потому что им не нужно бороться с самоидентификацией и харассментом
Очень надеюсь что ты либо тупой троль, либо глупый ребенок. Потому что иначе, у меня для тебя плохие новости.
Во-первых, вы тысячу лет ебетесь с BC. Осилить BC значит потратить дохуя драгоценного времени, вместо работы
Во-вторых, это гендерно-небинарные животные. Любой откровенно плохой код будет котироваться, т.к. "плохой код" - это термин цисгендерных угнетателей.
В-третьих, а впрочем, уже достаточно.
> Осилить BC значит потратить дохуя драгоценного времени, вместо работы
Не осилить бц значит потратить больше времени на последующую отладку. Или ты тот самый гениальный программист который пишет сразу без ошибок? Тогда непонятно с чего вдруг у тебя проблемы на такой мелочи как бц.
>Создадут нормальный язык.
а с железом и всеми остальными технологиями как быть? приходите за техподдержкой, а там ОНИ
Приходится сейчас на Путина только и надеятся, что не даст пидорам захватить рынок
>Мемори-сейфити
Не было и никогда не будет. Анально огораживаешь одну модель памяти, а потом прописывает не тот индекс массива и ловишь panic
во-первых, никто не запрещает тебе пользоваться итераторами и прочую функциональщину.
во-вторых, сейфти там скорее о том, что у тебя не возникнет ситуаций, когда 2 потока меняют значения по одному адресу, либо один поток удалил массив, а второй об этом не в курсе (на сях такая поебень даже в однопоточном коде встречается).
в-третьих, у раста хотя бы паники адекватные. Я бы даже сказал, приятные.
Ну дык обращение по индексу делается если ты точно стопроцентно уверен что нужное значение там есть. Если не уверен, делаешь get(i) и получаешь свой Option<T>
616x420, 5:01
Знаю что можно выставить edition = "2015", но это все 2018-edition-фичи отключит, а можно ли вырубить отдельно nnl?
Мне интересно НОРМАЛЬНОЕ и объективное мнение по языку. Я зашел не тролить, мне реально интересно, потому что нравится С++(На работе java). Просто я не хочу пока что в него погружаться, чтобы разбираться в нём.
Своё мнение напиши. Как язык, что нравится а что нет.
Конечно нет. Взгляни на этого парня. Он ебёт шведских цыпок по две штуки в день пикапя их рассказами про хаскель.
Ну, мне пока всё нра. Не хватает https://github.com/rust-lang/rfcs/issues/2092 разве что.
Если сравнивать с плюсами, то у раста
- меньше паник
- паники читабельны и понятны (сегфолты в плюсовом ооп коде та ещё мерзость)
- есть cargo
опять же, у плюсов есть хорошие фичи, типа умных указателей (не бц, но типа похоже), но это опционально - можешь юзать, а можешь и не юзать. Или ты будешь юзать, а кто-то нет - в какую-нибудь стороннюю функцию, которая юзает обычные указатели, умный уже не передашь.
А вообще я novichok, неделю на расте
нормальное и объективное мнение: язык говно. тупо добавили read write lock для всех переменных на этапе компиляции.
говорят, что многопоточное программирование сложное из-за ебли с синхронизацией и mutex'ами, т.к. сложно этот весь зоопарк контроллировать и уследить, нужно постоянно строить ментальную модель в голове что где откуда читается, где блокируется и т.д.
а теперь представь, что ВЕСЬ код на расте нужно писать как многопоточный код с mutex'ами.
А чего там сложно с мютексами-то? Вот с атомиками, да. Заебёшься придумывать как так сделать чтобы оно работало и было быстрее старого доброго лока.
>анально огораживаешь одну модель памяти, а потом прописывает не тот индекс массива и ловишь panic
А затем быстро находишь ошибку и исправляешь вместо того, чтобы весь день разбираться, почему сраный принтф печатает кучу кракозябр или откуда берется рандомный сегфолт.
>>29148
>говорят, что многопоточное программирование сложное из-за ебли с синхронизацией и mutex'ами,
Многопоточное программирование сложное, потому что всякие долбоёбы берут последовательную логику, херачат мьютексы на каждый чих и удивляются, а чего это всё стало медленнее, чем было.
>а теперь представь, что ВЕСЬ код на расте нужно писать как многопоточный код с mutex'ами.
Если ты не макака, ты ХОЧЕШЬ писать в таком стиле что на плюсах, что на Питоне, потому что огребешь проблем, если вызов функции поменял состояние , а ты не уследил.
>ВЕСЬ код на расте нужно писать как многопоточный код с mutex'ами
ЧИВО БЛЯТЬ? То есть я абсолютно не понимаю что ты спизданул. Какой весь код с мьютексами? Код пишется абсолютно нормально. Да, иногда приходится думать, почему ругается BC, но как бы тут на тебя ругается компилятор, а в C(++) это будет или сегфолт, или какая-нибудь забавная гонка данных, которую хуй отладишь. Или оверхед на смарт-поинтеры, да.
А сейчас еще NLL в раст добавили, теперь можно потихоньку и отвыкать от старых правил.
Да, бывает, что BC на нормальный код ругается и приходится подсказывать ему с помощью лафйтаймов, но это крайне редкий случай, и лучше уж так, чем потом сидет в дебагере, разбирая, а где же там все разъебалось.
> Пока не скомпилируешь, не поймёшь есть ошибки или нет.
Есть RLS, он компилирует в бекграунде и показывает ошибки сразу. А вообще двачую. Лучше бы сделали как в C++: пока не запустишь, не поймёшь есть ошибки или нет.
В любом языке так делаю, чтобы не отвлекаться от алгоритма, который пишу, зависимости нет.
Так падажжи ебана, а что не так? Конечно можно как в джаваскрипте ловить "undefined is not defined", но я как-то предпочту отловить ошибку ДО ТОГО, как программа запуститься. Странное желание, конечно.
747x420, 4:35
Думаю он имел ввиду что раньше ошибки лайфтамов он мог найти даже без компиляции - статическим анализом, посчитав скоупы.
Вообще я не знаю нужна ли компиляция теперь, но проверять "в голове" определённо сложнее стало.
>>29540
Вот собственно затем.
Я раст только изучаю, а nnl усложняет понимание и так сложной системы лайфтаймов.
Нужно всего лишь этот статический анализатор сделать и будет работать ровно так (или таки воспользоваться RLS/Racer).ТО есть в такой формулировке проблема только в том что еще нет такого инструмента. В C++ вряд ли IDE волшебным образом находила сама ошибки, да.
>я не знаю нужна ли компиляция теперь
У меня в виме плагинчик, которых высвечивает мои косяки при каждом сохранении файла - вы об этом? Если да, то хз, как вы без этого живёте.
алсо, поясните за лайфтаймы и вообще структуру - не наворотил ли я пиздеца
один из главных разработчиков redox os сдулся
> My main reason is that I have chosen to pursue a career in mathematics research.
Ну понял чел что писать код это не его. Что с того?
The 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.
Вся суть
Хотелось построжее. Однако, эти лайфтаймы, энто что-то, а вот вектор, ну совсем распиздяйский тип. Но я нашёл сторонний костыль - ArrayVec.
Построже с чем? Единственное прямо преимущество, которое я вижу, это потенциально более эффективная работа слайсов, по сравнению с веторами.
А так вообще непонятно какую задачу ты пытаешься решить. Судя по ArrayVec ты знаешь уже конечный размер своей "матрицы". Тогда почему не просто массив массивов?
Подскажите, пожалуйста, что означает символ "?" в конце некоторых функций/методов? И как он называется, чтобы пойти в доках почитать подробнее
>почему не просто массив массивов
мне нужен массив массивов с конечным типом ImageBuffer. Допустим, у меня 40 на 40 - как мне проинициализировать такую-то еблолу?
1. С ссылками я мог бы сделать [[&someImage; 40]; 40];
но ссылки в структуре, это пока неподвластное мне ниндзютсу
2. Если использовать [[someImage; 40]; 40], то это даёт ебический оверхед при создании - сперва скопируй 40х40 раз одну хуйню, потом заполни другой.
3. Можно обернуть ImageBuffer в п.2 в Option и заполнить нонами вместо someImage, но на хрен такое только ради создания - потом-то у меня однозначно всё на месте будет.
4. Остаётся юзать вектор, как и остальным слабакам
То есть я правильно понял, что тебе нужен 40x40 массив со ссылками на уже существующие объекты? Или что?
Вот ты пишешь:
> мне нужен массив массивов с конечным типом ImageBuffer
Тогда зачем тебе массив со ссылками на этот тип? Почему не сразу массив массивов из этого типа? (про оверхед вообще не вдуплил, что ты там и куда копируешь, сори).
Если проблема в том чтобы проинициализировать, то тут или вектором, или намути макрос, который за тебя заебашит инициализацию такого массива (я даже уверен что уже подобные хелперы существуют).
Может я тупой, но.. проблема в том, чтобы создать пустой массив типа ImageBuffer и потом заполнить значениями. Нужно или сразу создать заполненный - а это лишнее копирование, или сразу инициировать - а это 1600+ строк кода инициализации. Хотя, на счёт макроса я погуглю, сам такое писать пока не осилю.
>>31953
>одна и та же хуйня 1600 раз
вот так в расте инициализируются массивы. Сперва одна хуйня 1600 раз, а уж потом фигачишь туда 1600 разных хуйней вместо неё.
Все, понял. Ну да, создать "пустой массив" нельзя (как через malloc в C), ибо получится кусок памяти, который заполнен мусором (очевидно). Проще всего тогда через векторы, наверно:
let x: Vec<Vec<ImageBuffer>> = vec![Vec::with_capacity(40); 40];
Правда некрасиво, все-таки ты тут нигде явно не задаешь ограничения на размер. Но ежели это запихнуть внутрь
Есть еще ОЧЕНЬ НЕКРАСИВЫЙ вариант: https://doc.rust-lang.org/nomicon/unchecked-uninit.html , но я бы без веской необходимости им не пользовался.
>вот так в расте инициализируются массивы. Сперва одна хуйня 1600 раз, а уж потом фигачишь туда 1600 разных хуйней вместо неё.
Ну так ты сразу пихай туда нужную хуйню.
А что в твоем понимании адекватный вариант?
Нашёл array-macro, заглянул ему под хвост, а там всё тот же ArrayVec https://github.com/xfix/array-macro/blob/master/src/lib.rs
короч, пока на ArrayVec я и посижу.
https://habr.com/ru/post/437128/
Да. Никто же на языке не пишет.
Линкани сюда, посмотрим.
>>34327
ГЫЫЫЫЫЫ мам смотри там педики в разработке конпелятора участвуют ГЫЫЫЫЫ на работу на расте берут только педиков ГЫЫЫЫ мам я затролел их
пожалуйста, съеби назад в свой пщ-тред, ребенок
>яростный кукарек обиженного СоСолда
думаю, теперь всем окончательно стал понятен общий уровень завсегдатаев этого треда
Было бы смешно, он бы не агрился. Мне вот тоже не смешно. Нахуй вы несмешно тралите?
> бля ахаха смотрите там педики а если я педик меня возьмут к ним гыгыгы
Очень смешно, да. Может тебе еще и русские комедии нравятся?
вообще, сразу вопрос:
ImageBuffer<Rgb<u8>, Vec[u8]> => (через .into_raw()) => Vec[u8] => (через unsafe mem::transmute::) => Vec<Rgb<u8>>
я ничего по пути не проебу?
картинка на случай проёба разметки
А ты уверен, что у Rbg<u8> паддинга нету?
Лучше реализуй для Vec<u8> что-то типа GetPoint() -> Rgb<u8>. Или вообще сделай свой ImageBuffer массивом векторов, так и векторизация лучше работать будет.
Покажи лучше код. Из твоего описания тяжело сказать, не проебешь ли ты чего. Но кажется что не должен, Rgb устроен максимально примитивно (это же из image, да?), там вряд ли что может помешать (разве что на вход получишь таки не Rgb картинку, а что либо другое).
Нет, оно repr(C). Я недавно оттуда напрямую гонял байты в opengl, все нормально.
>image
да оно самое. Кода много, я там типы привожу, макросы хуячу - чтобы безболезненно можно было на Rgba или grayscale перекатиться.
>>34791
>у Rbg<u8> паддинга нету
А вот как понять? Вроде простая структура https://docs.rs/image/0.21.0/image/struct.Rgb.html
Лан, сча тестом покрою через обратную конвертацию и сравнение, и заебок. Как же охуенно, что в расте так элементарно пишутся тесты.
> И меня интересует, каким именно образом в расте осуществляется в ней защита от утечек памяти и потокобезопасность?
Никак, Раст защищает от неопределенного поведения и гонок данных. Система типов в статике и\или проверки в рантайме не дают двум потокам получить доступ для записи к одному ресурсу из двух мест одновременно.
Утечки, если постараться, можно получить, от дедлоков, если действовать неаккуратно, тоже никуда не денешься..
>Утечки, если постараться, можно получить
А если стараться не получать утечки, то легче ли их будет предотвратить чем в С?
Я хоть на С и писал только одни лабы, но даже в них всё равно сталкивался с утечками памяти, даже когда старался их предотвратить. В расте с этим всё как я понимаю намного проще и компилятор не даст скомпилировать откровенную лажу?
В си ты скорее всего просто забывал освободить память, оттуда и утечки.
Чтобы получить утечки в расте, нужно сделать хитровыебанный цикл между Rc.
>В си ты скорее всего просто забывал освободить память, оттуда и утечки
Именно так и есть. Поэтому для обнаружения и предотвращения утечек мне приходилось использовать следующий метод: я запускал проверяемый кусок в бесконечном цикле и смотрел в менеджере процессов на потребляемую процессом память. Если она оставалась константной, то значит всё в порядке, а если нет, то значит в освобождении памяти есть ошибка. И как не странно, выяснялось, что утечки встречались намного чаще, чем этого хотелось.
Открой для себя valgrind.
А лучше пиши на расте и не парься. Вероятность обосраться в нём на столько меньше, что до своего первого дедлока/утечки ты успеешь обписаться.
>Открой для себя valgrind.
Я вообще не сторонник дебагеров. И весь дебаг обычно провожу прямо в голове. Ну или пишу вспомогательные куски кода для тестирования.
Лаба лабе рознь. И бывали у меня и такие лабы, которые две недели нужно было писать по несколько часов каждый день.
>в свой пщ-тред
не, он не из пщ-треда, ибо всё, что появилось за последние 10 лет, уже опидорено, и так будет и дальше продолжаться и усиливаться пока мы паразитируем на технологиях бездуховных геймерики и гейропы
А у меня вот друг гей. Мне норм.
>Именно так и есть. Поэтому для обнаружения и предотвращения утечек мне приходилось использовать следующий метод: я запускал проверяемый кусок в бесконечном цикле и смотрел в менеджере процессов на потребляемую процессом память.
Конкретно эту проблему решили еще в С++ (до 11-го стандарте на уровне "можно сделать"), просто из-за кучи слоёв абстракции это породило ряд иных дырок.
Я про весь подход с RAII в целом. Благодаря смартпоинтерам стало приятнее писать деструкторы, но в любом случае, если в Си на каждый malloc приходилось писать free, то в плюсах нужно было описать одну функцию, которая вызывается сама.
Вот только ты можешь этого и не делать.
И люди уровня label3.cpp в рот ебали эти ваши смартпоинтеры.
>программа на языке не показатель производительности языка
))
В манямирке шизиков только, а в реальном мире, что язык может - то и производительность. Производительность может быть только у реальных написанных программ, а не у маняязыка в избирательном шизиками вакууме.
> если в Си на каждый 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'ов может быть несколько, в зависимости от логики.
И вот это уже пиздец.
>>35060
А люди уровнем повыше ебутся.
> если в Си на каждый 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'ов может быть несколько, в зависимости от логики.
И вот это уже пиздец.
>>35060
А люди уровнем повыше ебутся.
Не ебемься. Убери свой готу от греха.
В том то и дело что нет. Язык это то на чем ты пишешь программы. Ты не пишешь библиотеки на других языках, а только их подключаешь.
Это тест скорости библиотеки.
>Получается, если подключить ту же либу к Расту, то Раст окажется быстрее Раста?
Вот ты ебодятел-то, а. Эта либа написана на С, 99% времени работает она, соответственно, ты измеряешь скорость работы алгоритма в его реализации на С. Эту же либу можно и к бидону подключить - внезапно, какой охуенно быстрый язык получится.
Игорь, ты? Помнишь меня? Я твой одноклассник. Я узнал тебя по твоим шизоидным словам и высерам. А помнишь, как мы всем классом нассали тебе в кружку в третьем классе, на сладкоежке? Ты ещё выпил, облизнулся и попросил добавки. А потом тебя пришёл забирать твой отец, тот самый дворник, который на Вернадского изнасиловал собаку и получил условный срок за то, что украл плавленный сырок в магазине. Он зашёл в класс, все стали смеяться, а ты обосрался под себя от стыда, а потом сказал, что всю жизнь будешь ненавидеть дворником, но в 9м классе, когда ты пошёл на рейд, чтобы их отпиздить, то они пустили тебя по кругу, после чего тебе наложили на анус восемь швов. Как поживаешь, Игорян?
Если бы ты использовал не настолько протухшую пасту, то мог бы блеснуть своей, экхм.., эрудированностью, что ли. А так и этим не смог. Сожалею, старайся лучше.
Немного. Уменьши контрастность всех остальных цветов. Или просто возьми monokai или любую другую готовую тему.
Да, тесты вообще благословленные. Единственное немного раздражает то что в tests/ нельзя нормально сделать модуль, который сам тесты не содержит, а включается в другие модули с тестами. Приходится изворачиваться с tests/utils/mod.rs , чтобы оно не собирало этот модуль как отдельные тесты.
Ломают ABI.
Что это значит? Я понимаю так. Скомпилил ты в исполняемый файл. Взял этот файл, отправил другу, у него стоит та же ос или выше, он его запустил, всё сделалось. Правильно?
> статически слинкованы
То есть весь их код переведён в машинный язык и засунут в этот же бинарник (исполняемый файл)?
Да. От этого и бугурты на хелло ворлд.
Хуево. Это же еще очень мешает коммерческому использованию языка, ведь ты не можешь сделать что-то и распространять это в виде блобов.
Ну ты сам прикинь, какова доля либ в коммерции (обычно продают готовый продукт) и помножь эту долю на долю раста - вот ты получишь %, где это даже не необходимо, а "было бы неплохо". К тому времени. когда раст захватит мир, это наверняка реализуют.
Что касается ускорения конпеляции, то для этого есть кэш и он неплохо работает.
https://github.com/rust-lang/rust-enhanced/issues/358
https://stackoverflow.com/questions/37430628/rust-constants-in-different-modules
not found in the crate root - если делать ::VERSION
not found in `crate` - если делать crate::VERSION
я натурально заебался
Что такое главный модуль? main.rs?
Он и так стринг. Проверку на ошибку (и вытаскивание из Result) ты уже сделал в виде .expect()
Проблема в том, что я не знаю вводит ли юзер инпутом число... Инпут то в String хранится и нет смысла матчить на тот же i32.
Парсить этот стринг и снова матчить. https://doc.rust-lang.org/std/primitive.str.html#method.parse
Так оно, кстати, работает. Но, вишь какое дело, мне удобнее задать все константы в главном модуле, чтобы либы подхватывали их оттуда. Иначе мне придётся держать кучу констант для кучи либ (размеры массивов, пути, вот это всё) и при изменении каждый раз лазить в эти либы.
Ещё такое: как сделать тесты в отдельном крейте? Делаю по манулам, какая-то хуйня получается - или ошибка импорта, или 0 тестов пассед из 0. Если есть линк на гитхаб с рабочим вариантом, буду оч признателен.
Ёпты, нашёл решение. В кобылью сраку отдельные крейты и [lib], всё нужно делать через mod.
А модули тоже отложили до Rust 20? :/
Да кто только этого не говорил.
В контексте раста, посмотри, например, вот это: https://www.youtube.com/watch?v=aKLntZcp27M
Аметист активно пилят и вроде как частенько ломают АПИ.
Пистон кажется перестали развивать.
Еще есть ggez, но там тоже часто ломают апи.
Бля нах он нужен тогда? Самому ебаться с сишными запросами? Как у раста с C вообще?
Имеется ввиду игровой движок на расте. При том что движок должен уметь рисовать, вот я и говорю нах движок нужен если самому придётся брать то что этот чудодвижок нагородит делать из всего этого чуда вертексы и к openGL обращаться
Что ты вообще несешь? Ты спрашивал про физ. движок. Физ движка из коробки нету.
Рендерит движок сам.
Ты прикалываешься? Вверху была ссылка, там физический движок! Но он не умеет рендерить да?
Анончик.
У тебя есть игровой движок, скажем Аметист. Его задача дать тебе ECS и рендерить твою хуйню, что он с успехом и делает. Т.к. очевидно, ему нужна либа для работы с матаном, он юзает https://www.nalgebra.org
Отдельно от всего этого, есть еще физ. движок который используетт же либу для математики: nphysics.
Да, физ. движок ничего не рисует.
Возьми графический движок и физический движок. И делай своих игорей.
Внутренности раста
>задать все константы в главном модуле
По-моему ты неправильно воспринимаешь main.rs.
lib.rs - как раз "главный" модуль крейта-библиотеки.
main.rs - это отдельный крейт, который собирается в бинарник (bin-крейт), он вообще не часть библиотеки порождённой lib.rs.
Тиресно, хотя я раст нихуя не знаю
Ну то что ты написал это херня. Паттерн должен быть, я даже не знаю как сказать, константным выражением что ли (я не уверен, как правильно обозвать термин). Твой код можно переписать в таком виде:
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 и может использоваться после =>". Если бы мы могли слева от => указывать вызов функции, была бы неопредленность.
Видимо пытается сматчить некий инпут с заранее заданными значениями и если такое есть, то где-то сохранить.
Я бы на его месте перестал изъебываться и написал что-то типа такого:
if departments.contains(&input_department) {
hm.insert(input_name, input_department)
} else {
panic!("ВСЕ ПИЗДЕЦ НАХУЙ!")
}
Нихуя оно не работает у тебя. Ты не сравниваешь то что ты передал в match с ранее заданным xuy, ты просто взял и то что ты передал в match связал с именем xuy в рамках конкретного => . При этом у тебя ЛЮБОЙ вход будет удолетворять первой строчке match'а, и остальные компилятор должен пометить warning'ом как недостижимые.
Вот тебе пример, если нужно нагляднее: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=906665de9ed8d1bd6a26e3bacd693070
так же я считаю, что все хейтеры этого языка - простые неосиляторы, которые своими вскукаречными потугами пытаются восстановить своё значение в этом мире, но мы то знаем (что они обычные кукаретики)
Поддвачну. Я, вот, когда на других языках пишу, то такую хуйню горожу, аж самому противно, но не могу остановиться - конпеляется же. А тут как-то само получается стройно и почти красиво, я аж загордился чутка и блинов поел.
для сексуальных меньшинств тоже найдется место в необъятных чертогах ржавчины. так что раздевайтесь и смажьте жёпу для компилятора
>язык для настоящих мужчин, которые не бояться анальных кар компилятора
...Сплетаемся в объятьях братских. Крепкие руки крепкие тела обхватывают. Целуем друг друга в уста. Молча целуем, по-мужски, без бабских нежностей. Целованием друг друга распаляем и приветствуем. Банщики между нами суетятся с горшками глиняными, мазью гатайской полными.Зачерпываем мази густой, ароматной, мажем себе уды. Снуют бессловесные банщики аки тени, ибо не светится у них ничего.
— Гойда! — восклицает Батя.
— Гойда-гойда! — восклицаем мы.
Встает Батя первым. Приближает к себе Воска. Вставляет Воск в батину верзоху уд свой. Кряхтит Батя от удовольствия, скалит в темноте зубы белые. Обнимает Воска Шелет, вставляет ему смазанный рог свой. Ухает Воск утробно. Шелету Серый заправляет, Серому — Самося, Самосе — Балдохай, Балдохаю — Мокрый, Мокрому — Нечай, а уж Нечаю липкую сваю забить и мой черед настал. Обхватываю брата левокрылого левою рукою, а правой направляю уд свой ему в верзоху. Широка верзоха у Нечая. Вгоняю уд ему по самые ядра багровые. Нечай даже не крякает: привык, опричник коренной. Обхватываю его покрепче, прижимаю к себе, щекочу бородою. А уж ко мне Бубен пристраивается. Чую верзохой дрожащую булаву его. Увесиста она — без толчка не влезет. Торкается Бубен, вгоняет в меня толстоголовый уд свой. До самых кишок достает махина его, стон нутряной из меня выжимая. Стону в ухо Нечая. Бубен кряхтит в мое, руками молодецкими меня обхватывает. Не вижу того, кто вставляет ему, но по кряхтению разумею — уд достойный. Ну, да и нет среди нас недостойных — всем китайцы уды обновили, укрепили, обустроили. Есть чем и друг друга усладить, и врагов России наказать. Собирается, сопрягается гусеница опричная. Ухают и кряхтят позади меня. По закону братства левокрылые с правокрылыми чередуются, а уж потом молодежь пристраивается. Так у Бати заведено. И слава Богу…
и всё же воистину славный язык
Пасиба.
Блин, начал читать и думал мож как переделал забавно, а там просто цитата (хотя автор великий, конечно, как и повесть).
Со сметаной и творогом - заебок. Ещё чай зелёный покрепче, с вареньем кислым.
Аноны, у кого-нить есть пример кода/крейта для многопоточного заполнения вектора строго по индексам? Сам примерно знаю, как сделать, но боюсь подводных граблей, да и велосипедить не охота.
Мьютексы в моей задаче оказались только помехой, зря время потратил. Потом вообще непонятно, как из них данные раззалупливать - оригинал под обёрткой остаётся мувед, дроп не спасает. Если кто знает, поясните, плз, вдруг таки буду их юзать.
Сделал проще: в тредах возвращаю тупл с индексом и данными, а потом получаю в главном через джойн и впендюриваю по индексу. Впендюриваю тоже как-то чрезжопно, приходится сперва забивать 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);
}
>Аноны, у кого-нить есть пример кода/крейта для многопоточного заполнения вектора строго по индексам? Сам примерно знаю, как сделать, но боюсь подводных граблей, да и велосипедить не охота.
Но нахуя? Многопоточность - это когда у потоков изолированные данные и взаимодействие онли через ридонли-сообщения. Привыкай, сейчас на десктопы уже НУМА в лице тредрипера от амуде поперла и дальше будет только хуже, техпроцессы закончились и старая добрая SMP архитектура с одним пулом и контроллером оперативы уходит в прошлое.
Нужно перемолотить некоторое количество наборов данных и сложить в массив в строго определённом порядке. Однопоточно проблем нет - делай push и все дела.
>answer = result;
век живи - век учись. Сколько примеров не смотрел, видел заполнение векторов только через push. В остальном я практически так и сделал, только через return. Ещё такое - ты про join просто забыл или там какой-то фокус, что он и не нужен?
Джойн нужен если ты хочешь дождаться завершения выполнения треда. В моем случае мне это не нужно, т.к. мне важно получить значения, что происходит через канал.
т.е. rx.recv() ждёт завершения? Тогда это тот же джойн. Пока я вижу смысл rx/tx в построении каналов между дочерними тредами, использовать это в главном выглядит излишеством.
А почему бы не использовать rayon? Он же специально для такой хуйни заточен. https://github.com/rayon-rs/rayon
>>40691
В 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'а кто-нибудь знает?
Называется оно WebAssembly Host Bindings.
> Я в курсе что его пока нет, но работа-то ведётся, черновики стандарта какие-нибудь есть?
https://github.com/WebAssembly/host-bindings
>rayon
Едрить, оверкилл. Я тут >>40303 сильно протупил - у меня же есть вектор с тредами, которые уже отсортированы, поэтому push в вектор с результатами будет идти в заведомо верной последовательности. А я, чёт, продолжал действовать так, как будто последовательность произвольна (как было бы при заполнении данных изнутри треда).
Потому что оно сильно увеличит время компиляции, хотя вместо этого можно просто написать 3 лишних строчки кода. Вот если ему надо много таких штук делать, тогда есть смысл взять либу.
> Потому что оно сильно увеличит время компиляции
Нет, не сильно. Это ж тебе не C++ с шаблонами. Вот у меня в небольшой программе с rayon'ом:
Finished release [optimized] target(s) in 11.57s
> Compiling no-rayon v0.1.0 (/tmp/no-rayon)
> Finished dev [unoptimized + debuginfo] target(s) in 0.48s
vs
> ... rayon ...
> Finished dev [unoptimized + debuginfo] target(s) in 4.11s
Впрочем это холодная сборка после cargo clean.
После первой компиляции оно одинаково быстрое. Разве что CI бесить со временем будет, что вряд ли значимо в данном случае.
Читал кто-нибудь? Как вам?
СССука, хорошо.
Мне больше нравится писать ванильно. Это, конечно, збс, что карго вот так легко позволяет подключать крейты, но если использовать эту фичу слишком интенсивно, проект станет похож на нодовый с крейтами уровня left-pad и isarray.
Кстати, даже логика rayon примерно та же, что у многих нодовых модулей - добавляет новые функции (into_par_iter, par_iter) для существующих структур. Я так погляжу, разрабы раста многое подсмотрели у жс и у ноды.
Кек. Нет, братишка, манки-патчинг из жс-дристни ничего общего не имеет с тем, что делает rayon.
> Кстати, даже логика rayon примерно та же, что у многих нодовых модулей
Ты наверное кроме C++ ни на чём не кодил. В C++ действительно другая крайность, что подключение любой библиотеки, кроме header-only превращается в ад. А так подобное есть в любом современном (и не только) языке. В той же жаве очень удобная система пакетов. У C# тоже.
Их убогое vs наше великое. А суть та же - куча зависимостей тянет кучу зависимостей, каждая из которых экономит в среднем 7 строк кода на проект.
Ты же даже не понимаешь о чем речь, правда?
Я говорил о разъебывание прототипов которое глобально видно всем, а не о количестве зависимостей.
А я вообще не об этом, а о том, что порочна сама идея подключения внешнего модуля ради экономии пары строк. Что где-то оно хуёво реализовано с технической стороны, это уже частности.
Если впадать в крайности в стиле нпм, то конечно порочна. Впрочем подход goвна, где в каждом проекте копипаста min/max и прочих вещей не намного лучше.
Например, такое нужно для суммирования сигналов со сдвигом по фазе.
А теперь то же самое, но согласованными предложениями.
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=6b744d80e281f850b52345e9fdfef379
я не он, но проблемс в том, что если нужно как-то модифицировать ввод, а не напрямую кидать в хэшсет, канпелятор шлет нахуй
Я тоже не он, но не вижу проблемы.
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2f180525e572fab0fb770765b9280cd0
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=093cfdd97d4c7697f767b34c1aa2b24c
"Ввод с консольки" и "Модицифированный ввод" - это разные сущности по семантике. Значит, имеет смысл положить их в разные переменные. Если будет что-то парсить in-place, ты заколебешься абсолютно в первом же нетривиальном случае. Проще сделать новый объект FP-параша стайл.
Сначала хотел написать что незачем создавать новую строку doubled_input, ведь можно модифицировать input.
Но не смог запушить в строку саму себя:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=fcfd5d7e1ce67d9b9a75bdfbab4d9739
inb4: repeat, format! - они создают новые строки.
> ведь можно модифицировать input
Чтобы сделать длинную строку, нужно выделить под неё память и скопировать данные из маленькой строки. Когда ты в плюсах пишешь что-то типа
string a = "qqqq";
a += a;
Ты по сути делаешь то же, что и в случае
string b = a + a;
Только деструктор a вызывается раньше. Никакой "модификации" не происходит, нужно ровно такое же число операций.
>>42492
Тебе, по идее, нужно определить input_name и input_department в теле loop. Сейчас они "поглощаются" на первой итерации при добавлении в словарь и становятся невалидными, поэтому компилятор и ругается.
С++ практически не знаю, но из моих представлений при добавлении строки к строке происходит примерно следующее:
1. Проверяется capacity строки и если памяти уже выделено достаточно то строка-аргумент сразу копируется туда. (Т.к. пямять под строку при первоначальной аллокации/реалокациях, насколько я понимаю, выделяется с запасом.)
2. Если недостаточно - по происходит реаллокация памяти, причём, вроде как, перенос строки в другое место при этом не обязательно происходит, т.к. может оказаться что свободное место есть и рядом.
Так что эквивалентно это созданию новой строки только в худшем случае - и то наверняка в расте при полноценном создании новой строки больше действий выполняется.
Блять. trim возвращает слайс на строку, которая всё также умирает на следующей итерации. Нужно вставлять &input_name.trim().to_string();
Но это говнокод, вынеси тримнутые строки до match, а в самом match используй их без взятия ссылок.
let input_name = &input_name.trim().to_string();
...
hm.insert(input_name, &department[0]);
я, конечно, понимаю, что это не самое сложное задание, но по книге такая хуйня как
fn parse<'a>(mut words: impl Iterator<Item=&'a str>)
еще неизвестна
Мне просто было жалко аллоцировать память.
Можно было бы сделать split_whitespace().collect::<Vec<_>>()
и дальше работать уже с вектором вместо итератора.
.clone(), .clone(), .clone()
по большому счету, не считая логгирования, я использую dept и empl только по разу. как заставить компилер понять это и не рассказывать мне про borrowing?
(или ЧЯДНТ)
с другой стороны, насколько такой клонинг убивает перфоманс? (inb4 я из управляемых языков, там вообще похуй на такую парашу)
.to_owned() попробуй, если и правда по разу.
Спасибо .Понятен даже стал весь код.
С твоей выдержкой можно медбратом в дурке работать или учителем в спец. интернате для отсталых.
тебе ж компилятор подсказывает что делать
как вариант, передавать input_name[..], что создаст &str по значению равный оригинальному String
сука, тред не обновился, думал, что ответа нет
input.as_str()
> как заставить компилер понять это и не рассказывать мне про borrowing?
Ну так ты если сначала переместишь dept и empl внутри своих and_modify, то все, нет больше твоих переменных. Все правильно.
> с другой стороны, насколько такой клонинг убивает перфоманс?
Не ебу что ты там клонируешь, так что тяжело сказать.
> я из управляемых языков, там вообще похуй на такую парашу
Угу, а потом бекенд, на котором сидит 2 пользователя, не влезает в гигабайт памяти.
В твоем коде можно просто перенести println! выше, до workplaces, все равно код до него дойдет, а println! не захватывает переменные, так что ты сможешь ими далее воспользоваться.
Ну и вообще у тебя как-то странно сделаны твои .entry, .and_modify, .or_insert.
>Язык не поддерживает утечки памяти и с полностью безопасной работой с памятью.
>Пытаешься линкануть сишную либо, так как писать функционал готовой либы дольше самого клиентского приложения.
>Получаешь утечки памяти и сегфолты из-за скрещивания ежа с ужом.
>>Получаешь утечки памяти и сегфолты из-за скрещивания ежа с ужом.
>
Не используй сишные либы с утечками памяти и сегфолтами. Проблема решена!
> Все правильно
ну, я понимаю, что всё правильно, мне еще это компилятор рассказывает к тому же.
но вот как я вижу работу кода с .entry().and_modify().or_insert(): я получаю значение empl из хэша по ключу dept, потом либо изменяю его в and_modify или помещаю новое в or_insert, т.е. тут однозначная вилка в логике. но при том, что эти два вызова находятся в одном скоупе, компилер видит захват в and_modify, и потом переиспользование в методе выше его не устраивает по вполне разумным причинам.
в моем случае все эти значения - строки. конечно, неприятно копировать/клонировать все по паре раз,но как-то жить можно. а если бы это были чуть более сложные структуры данных (или не поддерживающие клонирование), то чтобы использовать одно поле для двух разных методов в логике, мне приходится приседать и выдумывать какую-то дичь (или мне так кажется с моим опытом уровня laba2.rs)
> не влезает в гигабайт памяти
предпоследний кастомер очень сильно удивился моим импрувментам дабы сервис не сожрал чуть больше имеющегося памяти, в коде, говоря: ну, пару гигов свурху можно и потребить, мы-то не сильно паримся по этому поводу
так, что да, лул, такое нынче пишется говно
> то чтобы использовать одно поле для двух разных методов в логике, мне приходится приседать и выдумывать какую-то дичь
if let entry = hm.get_mut(){
entry.push(string)
} else {
...
hm.insert(...);
}
Интерфейс and_modify добавили ради какой-то монадической НЁХ, но никто не запрещает пользоваться классическим интерфейсом, если он тупо удобнее.
А, блин, это Entry API, вообще забыл про него. Ну тогда короче, замени or_insert на or_insert_with (чтобы дефолтное значение генерировалось только если реально надо). Тогда пофигу, что везде clone, ибо оно будет реально выполняться только если будет вызвана соответствующее замыкание. Или можешь сделать так:
*(workplaces.entry(dept.clone()).or_insert_with(|| Vec::new())).push(empl.clone)
Ну и все еще если хочешь избавиться от clone, перетащи println! выше.
лайк, подписка
Он уже выстрелил. Даже на hh.ru уже есть вакансии не про крипту. Так что к тому моменту как ты попиздуешь работать предложений будет с головой.
В гейропе аналогично будет? Собираюсь в чехии учиться, а это, вроде, голубая карта и нахуй возвращаться. И еще, ты уже работаешь на расте или у вас его юзают (чисто для справки)?
Лабаем фин-тех штуки. Ничего особенного. По сути набор сервисов которые делаю всякие вычисления и набор апи для этого.
Я не он, но отвечу. Потому же, почему и жаба - из-за относительной строгости языка руководству проще быть уверенным, что армия макак-подчинённых не наговнякает.
ну чет основная масса софта, судя по такому ответу, как раз ожидает наговняканый продукт от индусов, вместо эффективно работающего приложения
>>Не используй POSIX и WinAPI, а еще >100 000 либ системного и прикладного уровня.
>> Когда предложил работодателю, меня уволили.
Потому что модно-молодежно.
Сложно на самом деле ответить почему решились, меня в тот момент не было. С технической точки зрения выбор очень удачный.
>наговняканый продукт от индусов
Дак индусы как раз и говнякают на жабе по этой самой причине, что в ней всё относительно (того же бидона или сей) строго и иерархично. Например, белые господа могут проектировать интерфейсы, оставляя грязным индусам реализацию.
>>44828
Да лан тебе ёрничать, не всё так плохо. Раст изначально заточен быть в упряжке с Ц/Ц++ софтом, т.к. прямо сейчас, например, код на расте работает в таком виде в фуррифоксе.
Ни разу не сталкивался с сегфолтом внутри ни одной сторонней либы, не говоря уже про POSIX и WinAPI. Они этого добиваются обычно месяцами и годами ебли, но результатом остаётся просто пользоваться.
>Раст изначально заточен быть в упряжке с Ц/Ц++ софтом
Пока все либы не перепишут на раст, будут в упряжке, так?
http://cglab.ca/~abeinges/blah/too-many-lists/book/
Вообще перестань заниматься хуйней. Хочешь списки, пиздуй в haskell/lisp/erlang.
как с IntelliJ живется? я привык в Visual Studio, но там, судя по вики, поддержка раста практически нулевая
ну вот я добавил #[derive(debug)] и почему от меня больше ничего не требуется?
если это сахар для компилятора, который распарсит поля и вытянет все в строку, то, например, растбук предлагает написать такую еболу: #[derive(PartialEq, Debug)]. есть какая-то дефолтная имплементация PartialEq?
Живу в емаксе, зависимость есть. rls конечно то еще дерьмо, но щито поделаешь.
Жабоподелие тоже кривое-косое. И не менее тормозное чем студия на проектах больше привет_мир.
Работают через макросы. Если интересно как конкретно поищи в сорсах стандартной либы эти макросы.
Ну или почитай доку:
https://doc.rust-lang.org/std/cmp/trait.PartialEq.html
This 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.
>>45996-кун
Ну а чего ты ожидал? Может у 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вноедов? У них есть аналог Джанго/Фласка?
>https://doc.rust-lang.org/1.26.2/unstable-book/language-features/proc-macro.html
>1.26.2
Плиз, когда гуглишь доки раста - ищи ссылку на актуальную версию.
Ссылка хорошая, одобряю, но тому анону не совсем подходит.
ну замени -> Self на -> Mamkoo, нихуя не изменится
разве что в конструкциях типа impl<T: Govno> Pahom for T { }, но я не уверен, что там не будет подводных камней
на любой другой неинтерпретируемый язык тебе переходить было бы также тяжело)
Я тоже мимо. Просто хочу разобраться.
Чтобы "выжимать" перформанс, в любом случае нужен ассемблер. Но даже это 3% кода. Для всего остального единственные важные свойства - отсутствие рантайма и GC. На плюсах у тебя тупо не будет времени оптимизировать свой код, потому что ты будешь отлавливать баг UB. А USB не станет работать быстрее потому что ты экономишь 10 тактов на проверке границ, когда делаешь системный вызов.
Популярные веб-фреймворки спиздили кучу фич у рельс, настолько, что затраты на изучение нового языка перестает быть столь выгодным. А поскольку есть уже множество готовых погромистов на пыхе\пистоне, то легче выучить один фреймворк.
Ну и еще устоявшееся мнение, что рельсы уже все, а руби это фреймворк одного языка
Мне кажется что рельсы достигли такого уровня, что дальше развиваться особо некуда уже в рамках их предметной области (блогов за 15 минут кек). Поэтому и "всё".
Сам сейчас подумываю с рельсов на Элексир/Феникс попробовать перейти, т.к. другая парадигма, на порядки лучший перформанс - это открывает новую предметную область. Плюс эта платформа используется в продашкене какое-то время, уже проверена.
Но зачем кому-то еще один веб-фреймворк на Расте? Потому что ты фанбой Раста? Быть фанбоем одного языка в 2019 не вижу никакого смысла. Объясните, чего я не догоняю?
При этом Руби - реально классный язык, работа с которым приносит удовольствие.
Веб-фреймворки делают под все языки, даже под С. Хуле ты тут спрашиваешь? Иди спроси у авторов этих фреймворков.
Авторам фреймворков может быть тупо по-фану, или фанбои своих языков. Я хочу спросить у людей, которые делают выбор между фреймворками. Свой выбор я описал.
Два чаю, он офигенный. Просто пишу на нём на работе и радуюсь жизни. Единственное плохое только то, что эти ощущения приходится совмещать с кучей легаси на пхп и версткой.
Хуй знает что там офигенного. Интеллисенса из-за дигамикодрисневости нет, какие там методы у объекта - хуй поймет, лезь в документацию.
Т.к. в хорошем коде (а в Руби мире культ хорошего кода) у объекта не бывает много открытых методов, то их можно все держать в голове, а лишь изредка залезать в доку меня напрягает.
С другой стороны, получаешь мощное метапрограммирование (отдельный лайк за простую реализацию DCI), отсутствие тонн бойлерплейта, красивый DSL для тестирования, консистентность, выразительность и изящность.
Я бы уже и рад перейти на что-то другое для смены обстановки, но Руби так хорош.
То есть апишку любой новой библиотеки нужно сначала выучить как стишок, чтобы держать в голове? Такое себе удовольствие.
Ну ты ж не будешь по интелисенсу изучать новую библиотеку. Если это библиотека API какого-то сервиса, ты изучешь раз, напишешь враппер с двумя-тремя публичными методами и больше не думаешь о деталях реализации.
Можешь привести свой контрпример, аж интересно.
Оказывается растовский ripgrep используется в vscode, давно уже.
Раст - нужен.
Ну падажжи, каждый написанный тобой враппер ты должен в голове держать?
А интеллисенс очень облегчает использование новой библиотеки, с ним в доках ты читаешь о принципах и основных объектах, детали же тебе подсказывает интеллисенс прям во время написания кода.
Какие языки кроме Руби ты пробовал?
Почему каждый, только те с которыми работаешь вот сейчас.
Я не спорю что интелисенс удобен, но это разумная плата за метапрограммирование кмк.
Если работаешь с объектами, у которых 100500 методов, необходимость интелисенса повышается. Если в ходу single responsibility principle, и программирование - это по сути композиция, то понижается.
> в Руби мире культ хорошего кода
Как-то (в ~2009, охуеть) прикручивал к тикетовке (типа багрепортилка для дежурных админов на хостинге) жаббер-бота, чтобы на мессаги оперативно реагировать. Это был единственный мой опыт на руби и оно даже работало. Дак я там такого наговнякал, страшно вспомнить.
Хорошо, что в Руби мирке никто про это не узнал, а то вломили бы пизды - мама не горюй.
Я не говорю выучить, я говорю держать в голове. Не работая с конкретной кодовой базой, ты эти 20 методов забудешь через какое-то время. Когда я переключаюсь на задачу из другой области проекта, я стараюсь из своей памяти выгрузить инфу по прошлой задаче, которая сейчас мне не нужна.
Разница в том, что во втором случае информация структурирована, и воспринимается легче. Это одна из причин, по которой ООП > процедурного.
Кстати, для Руби есть IDE RubyMine с автокомплитом, не знаю насколько умным, и только что загуглил - экстеншен для VS Code, пикрелейтед.
Но Ruby это не PHP, где надо постоянно вспоминать в каком порядке аргументы в array_search, а в каком в strpos. В Ruby действует Principle of Least Surprise.
Держу, а то тред мертв.
особенно в задаче "выжри всю память на хелло ворлд"
>Multithreading and Asynchronous concepts
в растбуке не нашел чего-то, отдаленно напоминающее асинхронность (в понятиях .NET, nodejs, etc.). это копипаста не очень умной хрюши писанины не очень умного челебоса, или какое-то приблизительное подобие асинхронности в rs все-таки есть?
Корутины - это всего лишь приятный сахарок для асинхронности. В том же node.js (да и в js вообще) и .NET асинхронный код можно писать и на промисах (в .NET они имеются тасками) или коллбеках.
В растбуке есть про Send и Sync, про Arc<T>, мьютексы, треды и каналы, но в вакансии может имеется в виду в целом. Может там тебя на собесе про STM cпросят. Я чёт охуел с того, что треды не напоминают тебе об асинхронности и мультитрединге. Выросло, блять, поколение, не нюхавшее pthread.h.
в моем понимании асинхронность - это не держать тред ожидающим ответа от какого-то не очень быстрого источника информации (жосский диск, БД, сеть, etc.), а суметь сделегировать ему какой-то кусок другого многопоточного кода (или убить нахуй). ну, это идея в .NET такая, как минимум
Arc я не трогал, а про Send/Sync читал по-диагонали. я не говорю, что в буке нет такого, а то, что я - дуанне нашел. но есть повод потеребить главы заново
Есть либы, в этом году введут async/await как часть языка.
все обозримые вакансии - криптохуй инженер
пробоваться на такое чисто ради получения представления о релевантных знаниях
Да не, меня тут с веб-хуйни отфутболили. Не хотелось бы раскрывать подробности, тк. наверняка в треде я не один такой. Ещё выясним, что ухлёстывали за одной сучкой, и подерёмся.
змейку напиши
Возьми какую-нить шнягу, которую писал ранее для себя/бабушки/лулзов и перепиши на расте.
Алсо, всё то же, что пишется на го, пишется и на расте - они конкуренты, тащемта, что бы там не говорили.
Коммить@пуллреквесть
> Мимо гофер из соседнего треда хочет вкатиться в раст.
Подожди пару месяцев пока они асинхронные функции хотя бы в ночнушке допилят. Иначе после ГОвна будет больно без корутин.
Если я интырпрайз программист, пишу на Котлине, чтобы не умереть с голоду КРУД к СУБД, но для себя хочу более быстрый и нативный хобби-язык (Котлин-нейтив очевидно не взлетит) в 2019 мне стоит смотреть на современные плюсы или раст? Других вариантов у меня нет, прально? (исключаем Хаскель и голанго-парашу)
дай бог, раст пригодится где-нибудь еще кроме блокчейнов
ибо в данный момент широкого пула применений для него нет
Из этих двух стульев в твоей ситуации явно раст.
Не.
> водить, потом её изменять, а потом после цикла проверять действительно про
Явное лучше неявного.
Покажи юз-кейс.
>for..else
https://github.com/rust-lang/rfcs/issues/961
пообсуждали и отказались. Нельзя притащить в язык весь существующий в мире синтаксический сахарок, не притащив вместе с ним косяки, присущие уже содержащим его языкам. То, что есть сейчас, уже очень сахарно, по сравнению с сями/плюсами, уж точно.
Почему не сделали единообразно? Зачем для int->float рекомендуют from, а для float->int - as?
Йеп. Заметь что для 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
if, кстати уже завезли в const fn или еще нет? И если нет, то планируют ли?
Не завезли. Вот этот RFC https://github.com/rust-lang/rfcs/pull/2342 выглядит как самое близкое к этому. Да, там не про if в const fn, но кажется, что если этот RFC примут, то и в const fn завезут быстро.
В vscode без указания типов не всегда комплитится, больше ничего не могу сказать.
мимо-написал-хеллоуворлд-на-расте
По сравнению с джавой очевидно он хуже, но в отличии от джавы писать на расте без иде вполне себе можно.
https://areweideyet.com/
Когда лень создавать отдельную функцию, в которой можно из цикла просто вернуть найденное значение, а после цикла выполнить что-нибудь или вернуть дефолтное значение.
Или вот нагрепал код, где это используется, но тут определенно не хватает меток для циклов, чтобы выйти из вложенного.
В расте подобное не пишут, потому что чаще всего у тебя будет нормальный функциональный код с итераторами, а не процедурная параша.
Объясни что на скрине происходит. Без типов решительно невозможно разобраться.
Что такое `aliases & d.keys()`? и какой тип у key?
>какой тип у key?
я мимо, но какая разница? я так понял, дело обстоит с ассоциированным списком. чем бы тот key не был
aliases_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"}.
Этот RFC уже приняли (почти год назад, лол). Надо смотреть issue в репе самого раста: https://github.com/rust-lang/rust/issues/49146
Хотят добавить универсальный TryFrom [1]. Но там свои проблемы с never type [2].
[1]: https://github.com/rust-lang/rust/issues/33417
[2]: https://github.com/rust-lang/rust/issues/57012
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2d460eb8bb303b44da87582da7287210
Что-то типа того. Сам пример не скомпилится в песочнице, потому что maplit недоступен %могли бы и добавить, конечно%, а мне лень переписывать.
Сначала думал сделать через HashSet::intersection как в пиздоне, но это настолько катастрофически неэффективно и неявно, что плюнул и сделал по простому.
>думал сделать через HashSet::intersection как в пиздоне, но это настолько катастрофически неэффективно
Внезапно нашлось такое:
https://stackoverflow.com/q/35439376/521590
В одном из ответов рекомендуют заменить хэш функцию, это помогает, но все равно медленнее твоего варианта.
Я вариант с пересечение даже не пробовал писать, потому что I WILL NEVER ALLOCATE
[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"
Оно, спасибо.
Не пизди. Это процедурные макросы. Никакого наследования в расте нет. Они вообще могут делать почти всё что угодно.
Конкретно макрос Deserialize из Serde [1], добавляет трейты для десериализации объекта.
[1]: https://github.com/serde-rs/serde
>Никакого наследования в расте нет
impl T for S {
}
только в случае с [derive] итоговое поведение определяется тем самым макросом. используя impl for реализацию выдумывает писарь
Трейтам в расте для полноценного наследования не хватает как минимум двух вещей:
1) Полей в трейте. Проче говоря, сейчас все треты stateless.
2) Возможность вызова родительского метода при имплементации трейта. Проще говоря раст не создаёт vtable для методов трейтов. https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=59bde35749b208dc8d3f8a7829a26304
Бждад как красиво на второй шебм. Что за либа?
естественно, я не говорю о строго ОО-шном наследовании
это наиболее полно (как по мне) объясняющий термин. я вообще не в курсе, если у impl какое-то определение. сам растбук говорит что-то вроде
> to define implementations on types
Не думал что на дваче можно встретить опытного лиспера. Есть ощущение что тут одни школьники и тролли.
Бля, а у меня как раз на той неделе появилась идея запилить консосоле-клиент для скроллинга нулевой. Ну Татрикс как всегда, блин.
На емакс-лиспе кучу всего писал. На го две кучи (мне конечно стыдно, но что поделаешь). На кложуре в основном всякие недоделки и на отправка всякого на синт через овертон. Общелисп какое-то время ковырял, даже по работе написал пару вещей, ну и для своих проектов. У нас общелисп сейчас на текущей работе прекрасно в проде крутится, хотя писал его не я. Ну и опенсурсный проект на общелиспе стал для меня билетом за границу, так что я не жалуюсь.
надеюсь твоего ребенка выебут и зарежут муслимы, а твоя жена сгниет от рака :P
так и будет
да да
кучу раз хотел вкатиться в лисп, ради прикола изучить кложур. другие языки тоже хотел подрочить. но нахуй этим всем заниматься, если практически всю эту мичпуху вокруг я не применю. а закордон мне неинтересен
раст хоть более-менее начал взлетать. хоть он меня вдохновил на чуть более глубокое изучение, чем первая страница интродакшна
Пиши на хаскелле.
есть микросервис на джаве который запрашивает один сайт, парсит респонс, делает небольшие вычисления и кидает месседж в redis pub-sub, другой сервис принимает. В худшем случае всё это занимает ~100ms. И задержка не в сети, а именно в парсинге респонса (парсинг HTML-a через jsoup) и вычислениях до того как я отправляю месседж в редис.
Скажите, есть ли смысл переписать тот сервис на Rust?
Не знаю на счет раста, но знаю что перл парсит текст быстрее си или на одном уровне.
Есть. Когда попробуешь serde на вкус, все остальное будет казаться недоразумением.
Кстати serde довольно таки тормознутый. JSON на 60 Мб serde парсит секунд 10-20, на питоне же меньше секунды.
> все остальное будет казаться недоразумением
Сомневаюсь что rust может предложить что-то лучшее, чем aeson в хаскелле или circe в скале.
Окей, я уже попробовал serde, но так сходу сделать что-то работающее не получилось, пришлось все таки "the book" читать. Прошел пока половину, вот задумался стоит ли инвестиция времени того, может сильно быстрее и не будет, поэтому и вопрос.
>>61143
Да наверное си быстрее будет, но раз уже такое дело решил новый модный язык попробовать
>>61155
Ну надо вытащить данные из HTML-a, апи там нету, поэтому так. Или я не понял твой вопрос.
борду смогу написать на нем?
Сможешь.
Хочется из гранатомета по воробьям пострелять?
На расте ничего не пишут. Язык говно же.
графоний есть адекватный для rust?
не в смысле пердолинг на уровне pubg, а хотя бы на уровне формоприложения с каким-нибудь простейшим 2д
>arewegameyet
не удосужившись даже пролистнуть страницу, я посчитал, что это описание движка для гейдева. сункс
интеллисенс работает через член
например, у меня не подсвечивает бОльшую часть методов из стандартных библиотек и внешних модулей. что-то вроде
vec!(1, 2, 3).pu
не заавтокомплитит
а так да
Двачую, почти ничего не автокомплитит, а для новичка как я было бы неплохо все подсвечивать как в джаве
Ну клиппи хоть работает в редакторе? А то каждый раз в консоль за ним лезть. В саблайме сколько ни ебался, так и не понял, почему не работает.
Возможно стоит добавить с следующую шапку:
https://scanlibs.com/hands-microservices-rust-scalable/
Что за ебанина эти турбобиты-хуиты? Как с них качать безрегистрацииисмс блджад?
dropmefiles
> 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
Котаны, а есть нескучный синтаксис для раста без точек с запятой?
Ну типа как ризон для окамла, только наоборот (и для раста).
Не взлетит по двум причинам.
Первая: точка с запятой превращает expression в statement (то бишь подавляет возвращаемое значение).
Например этот код скомпилируется
fn asd() {
20;
}
а вот этот нет:
fn asd() {
20
}
потмоу что компилятор будет жаловаться, что функция должна возвратить '()' (пустой тип), а ты пытаешься возвратить '{integer}'.
Вторая: макросы. Для поддержки этого диалекта раста придётся переделывать все макросы во всех крейтах, ибо они на входе будут ожидать валидный растосинтаксис (а из-за первой причины тебе придётся грамматику раста кардинально переделывать, чтобы убрать точки с запятой).
Idea + rust plugin вполне предоставляет навигацию по библиотечному коду. Подсветка работает хорошо. На первый взгляд все как для джавы
Чет ты аутизм какой-то выкатил. Я спрашиваю про компилирующийся в раст язык с нескучным синтаксисом, а ты какую-то дичь пишешь, извини.
> Я спрашиваю про компилирующийся в раст язык с нескучным синтаксисом
До такой хуйни из жаваскриптомирка ещё никто не додумался. Будешь первым. Были те, которым точки с запятой пиздец как мешают кодить, но их методично посылали нахуй.
>До такой хуйни из жаваскриптомирка ещё никто не додумался.
Почему? Я вроде несколько растоязыков видел, но в основном они слишком сильно меняли семантику (по крайней мере вариация на тему "динамический раст" точно была)
Точки с запятой ебанутое решение, сделали бы как в свифте. И явный return лучше.
> Почему?
Потому что в отличии от остальных подобных языков о совместимости с 50% крейтов можно забыть, ибо макросы. Т.е. по сути ты теряешь экосистему раста, а значит и смысл строить новый язык поверх него.
Хотя тот же котлин, например, компилируется напрямую в байт-код, а не в жаву, хотя и имеет совместимость с жавой.
>Потому что в отличии от остальных подобных языков о совместимости с 50% крейтов можно забыть, ибо макросы.
Ты опять какую-то хуйню несешь.
Это ты хуйню несёшь, говна кусок. Тебе что нужно? Встраиваемый в раст язык у которого своя собственная стандартная библиотека, для которого ты просто делаешь некоторые АПИ, как например встраивают язык Lua или JavaScript? Или язык который сможет вызывать растовские функции и компилируется вместе с ним в один бинарник (как например сделали с Rust2015 и Rust2018 - по сути два языка, которые поддерживаются одним компилятором и могут спокойно взаимодействовать друг с другом)? Если второе, то тебе нужна стандартная библиотека раста и возможность использовать его крейты? Если да, то для этого нужна совместимость на уровне ABI (чтоб можно было вызывать эти самые функции) и совместимость синтаксиса, чтобы процедурные макросы могла нормально работать (а они получают и выплёвывают синтаксическое дерево).
Лучше притащить ссылку что именно ты там видел.
Если это что-то вроде http://www.piston.rs/dyon-tutorial/ то это просто отдельный язык и он не транспайлится/компилируется в раст.
360x360, 3:02
Научись понимать и принимать непривычный для себя синтаксис.
Если ты не тупой, и если каждая мелочь синтаксаса обоснована, дизайн языка целостный, как в расте (а не легаси и наслоения протухающих костылей как в плюсах и js) - то ты без проблем свыкнешься с непривычным поначалу для тебя синтаксисом.
Предложения по обновлению шапки, картинки или что нибудь-еще?
Скалист в треде. В скала треде не сижу, что эти уважаемые/говноеды из себя представляют не знаю, прошу по ним не судить. Я тут поделюсь впечатлениями никому не нужными.
Итак. Наверное ленивый не слышал про новенький язык системного уровня. Решил и я потыкать Rust. За плечами императивная жавка, славная Scala, немного хаскель. (ну и тыкал всякий хлам типа питона, жса).
Краткие отрывки из описаний, статей - создают крайне положительное впечатление. Решил обмазаться. Обмазаться под винду, т.к. на домашней пекарне она, для игрулек.
Скачал компилятор и тут понеслась.
Он мне говорит скачай ебалу Visual Studio билд хуилд.
Ладно. Скачал-поставил. Компилятор говорит "нееее. не поставил". Ладно. Я упорный. Пошёл перечитывать растосайт.
Да говорят скачай ебалу и поставь галочку на с++. Какой С++? Я же поставил с++ билд тул. Вот же он. Ладно пошёл форумы курить. Ага там ещё есть С++ в списке. Ну ахуеть теперь.
Это вы ребята проебались конечно с гет стартед и инсталлом. Стартовать не очень приятно было. Ну ладно. Вроде хелоу ворлд завёлся.
Расчехлил растбук. Приятно написано. Вербозно конечно, но зато ничего не упущено.
Решил обмазаться ИДЕ. Поделями жидбрейнс я сыт по горло. Решил попробовать что-нибудь другое. Поставил VS Code. Давай накатывать плагинчики. Плагинчики говорят накати ещё lldb. А ещё накати питончика - ты же хочешь дебажить? Погорел, успокоился и накатил.
VSCode конечно лажа какая-то. Какой-то непонятный интерфейс. Ну ладно пока сойдёт. Подсветочка есть, билд сервер краснит, дока подтягивается. (оценил к слову локальную доку, собираемую из терминала. Кайф) Реквестирую советы какую ИДЕ ещё заценить.
Написал вот guess_game. Всё понятно. Вот он паттерн матчинг, вот типы, божественная иммутабельность, АДТ (result же это адт?). Всё как я люблю. Многое очень похоже на скалу. Всё удобно, всё радует. Да конечно опять точки с запятой ставить, но ладно уж.
В общем не смотря на рейдж на старте, пока всё идёт довольно весело и интересно.
Куча вопросов к вам, бывалым. Всё конечно узнаю из растбука, но мне нетерпится. Что по тайп-классам? Я так понял тут так же через трейты это реализовано. Но в скалке ещё implicit учавствует в их образовании. А как тут? Что по функциональной парадигме? Вики говорит, среди прочего, это функциональный язык. Что по referential transparency? println! говорит о том, что не завезли FFI инкапсулированного в какую-то IO монаду. Хотя в скала так же, но у нас это допилено функциональными либами. Как вообще сообщество смотрит на уклон в сторону ФП?
Скалист в треде. В скала треде не сижу, что эти уважаемые/говноеды из себя представляют не знаю, прошу по ним не судить. Я тут поделюсь впечатлениями никому не нужными.
Итак. Наверное ленивый не слышал про новенький язык системного уровня. Решил и я потыкать Rust. За плечами императивная жавка, славная Scala, немного хаскель. (ну и тыкал всякий хлам типа питона, жса).
Краткие отрывки из описаний, статей - создают крайне положительное впечатление. Решил обмазаться. Обмазаться под винду, т.к. на домашней пекарне она, для игрулек.
Скачал компилятор и тут понеслась.
Он мне говорит скачай ебалу Visual Studio билд хуилд.
Ладно. Скачал-поставил. Компилятор говорит "нееее. не поставил". Ладно. Я упорный. Пошёл перечитывать растосайт.
Да говорят скачай ебалу и поставь галочку на с++. Какой С++? Я же поставил с++ билд тул. Вот же он. Ладно пошёл форумы курить. Ага там ещё есть С++ в списке. Ну ахуеть теперь.
Это вы ребята проебались конечно с гет стартед и инсталлом. Стартовать не очень приятно было. Ну ладно. Вроде хелоу ворлд завёлся.
Расчехлил растбук. Приятно написано. Вербозно конечно, но зато ничего не упущено.
Решил обмазаться ИДЕ. Поделями жидбрейнс я сыт по горло. Решил попробовать что-нибудь другое. Поставил VS Code. Давай накатывать плагинчики. Плагинчики говорят накати ещё lldb. А ещё накати питончика - ты же хочешь дебажить? Погорел, успокоился и накатил.
VSCode конечно лажа какая-то. Какой-то непонятный интерфейс. Ну ладно пока сойдёт. Подсветочка есть, билд сервер краснит, дока подтягивается. (оценил к слову локальную доку, собираемую из терминала. Кайф) Реквестирую советы какую ИДЕ ещё заценить.
Написал вот guess_game. Всё понятно. Вот он паттерн матчинг, вот типы, божественная иммутабельность, АДТ (result же это адт?). Всё как я люблю. Многое очень похоже на скалу. Всё удобно, всё радует. Да конечно опять точки с запятой ставить, но ладно уж.
В общем не смотря на рейдж на старте, пока всё идёт довольно весело и интересно.
Куча вопросов к вам, бывалым. Всё конечно узнаю из растбука, но мне нетерпится. Что по тайп-классам? Я так понял тут так же через трейты это реализовано. Но в скалке ещё implicit учавствует в их образовании. А как тут? Что по функциональной парадигме? Вики говорит, среди прочего, это функциональный язык. Что по referential transparency? println! говорит о том, что не завезли FFI инкапсулированного в какую-то IO монаду. Хотя в скала так же, но у нас это допилено функциональными либами. Как вообще сообщество смотрит на уклон в сторону ФП?
Ты охуенен
ты охуенен
и ты охуенен
>ФП
ну вот я как-то так проверяю наличие файла в дире. Вроде достаточно функционально. Или что ты там имел в виду?
вот этот верно говорит -> >>64751. Ну почти. Не все на самом деле. Есть любители обмазываться императивщиной и сайд-эффектами. Но я из тех что объебошился, да.
Ну я так понимаю - так выглядят лямбды. Функции как first class values хз как это по-русски сказать это конечно шаг в сторону ФП, но я про монадки, аппликативы и прочий теоркат. Соответственно и про higher kinded types. Да чтоб с частичным применением. Ну и есть ли карирование?
>карирование
https://rosettacode.org/wiki/Currying#Rust - что нагуглилось
монадки вроде прикручиваются сторонним трейтом + дефолтный Option
Большинство перекатчиков на раст из мира императивщины, поэтому лучше ты сам нагугли и поясни, как оно обстоит в расте и чем отличается от скалы/хацкеля.
спасибо, анончик. по мере изучения разберусь с вопросом и напишу
навигация ко всему, что не является кодом данной либы, работает через хуй (никак)
В емаксе переход в функции крейтов и стандартной либы через rls работает через раз. Макросы не работают от слова совсем.
Сделали, но не полностью. Иногда макросы отваливаются. Например, если лазить по исходникам других либ. А иногда не отваливаются
https://rust-lang.github.io/rfcs/2471-lint-test-inner-function.html#guide-level-explanation
ну вот я загуглил твой мессадж
а потом увидел, что у тебя весь код прямо внутри fn main()
Спасибо, когда вытаскивал всё за мейн то оно ныло на нот фаунд из зис скоуп. Вообще странно что они пихают этот код в растбук наверна где-то пропустил объяснения в стиле "не повторяйте дома"
Ты filters_by_size внутрь main запихал. Юзал бы rustfmt сразу увидел что во что вложено.
https://github.com/wangds/libbayer
1. run_demosaic, который ни хуя не возвращает полезного, весь результат кадётся в заданный буфер. Но может выкинуть Err. Сука, я полдня убил, пока не обратил внимание на note от конпелятора и не сделал unwrap, которого даже нет в примере.
2. Оказывается, размерность результата должна быть равна размерности равки, ну охуеть. А смысл тогда задавать её самому, если она очевидно выводится?
Бля, ну что ему стоило создать буфер нужного размера самому и вернуть? Так он и сделал бы unwrap необходимым, и избавил юзера от лишних действий по выделению буфера заведомо известного размера. А так какая-то хуйня получилась, ей б-гу. И эта вот хуйня, единственное, что сейчас есть на расте для дебайерезации, rawloader её не умеет.
>Бля, ну что ему стоило создать буфер нужного размера самому и вернуть?
Если тебе нужно будет обработать 1000000 картинок, то выделение памяти отожрет заметную часть перформанса. Можно придумать что-то более элегантное, но это не случай "потому что могу".
Ты о том, что можно задать один раз буфер под все 1000000 и потом нарезать слайсами? Вариант, конеш. Но unwrap() в пример он мог бы добавить, как и самостоятельно вывести размерность буфера из размерности равки (раз уж ему так сложно самому сделать сдвиг вправо на разность бит).
>В растбуке.
Читал поностью. Нет там ни фига про все эти хитрости. Да и код примеров там слишком примитивный.
Programming Rust почитай или просто задавай конкретные вопросы или приводи примеры кода.
Это копия, сохраненная 15 апреля 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.