Это копия, сохраненная 21 мая 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Ссылка на официальный сайт: https://www.rust-lang.org/
В этом ИТТ мы можем объяснить базовые и продвинутые концепции языка, и программирования в целом, поможем вкатывающимся, подскажем что выбрать для веба, игр или, прости Абу, блокчейна.
IDE для Rust: https://areweideyet.com/
GUI для Rust: http://www.areweguiyet.com/
Web для Rust: https://www.arewewebyet.org/
GayDev для Rust: https://arewegameyet.rs/
Что еще есть для Rust?
- Посмотри сам: https://wiki.mozilla.org/Areweyet
Основная литература:
Rust Book(версия на русском языке): https://doc.rust-lang.ru/book/
Rust Book: https://doc.rust-lang.org/book/
Rust by Example: https://doc.rust-lang.org/rust-by-example/
The Rustonomicon(для продвинутых анонов): https://doc.rust-lang.org/nomicon/
Programming Rust: https://www.oreilly.com/library/view/programming-rust/9781491927274/
Ресурсы на русском: https://rust-lang.ru/
Отдельное спасибо автору этого гитхаба(старому ОПу). Здесь вы сможете найти много полезной информации: https://gist.github.com/TatriX/183c816f1346d418f969c4576c2b9b41
Предыдущий тред: >>2107844 (OP)
Да очевидно это рассчитано на тупой маркетинг, кто семейные деревья в бок рисует с хронологией? Приписка что это семейное дерево лишь чтобы такие как ты вовремя пукнули и поправили, а ассоциация ровно ложится как и задумал автор. Некрасиво и низко.
после такого говна и манипулированием даже не хочется раст трогать
Первая вакансия.
Первый флагманский проект - утилита grep.
Был принят в мазилу, а когда выпинут - не указали на самом деле авторы тупые и могли упомянуть создание фондейшена раста
Написания браузера на мазиле (написали же??)
> что уже достижение.
На самом деле нет. С появлением ллвм каждый второй студент придумывает свой ЯП и пишет к нему компилятор в ир-код, который скармливает ллвм. Вот когда они интегрируют Cranelift как бэкенд хотя бы для debug-билдов на х86_64 (а такие планы у них были), тогда и можно сказать, что на расте полностью написан компилятор.
Боимся переполнения буфера, а вам прошу проследовать в петушиный угол к жабодаунам и плюсодебилам.
Но вы же освободили память, но в память по указателю до сих пор пишутся данные!
А ещё у вас состояние гонки теперь. Ех, непорядок. Растодебилы опять обосрались.
Слаботипизированные, потому что.
Раст потому и сильнотипизирован, ведь это исключает класс ошибок (с ув. КО)
Ну, очевидно, что эту таблицу писал человек, который нихуя не знает про кресты, а ещё думает, что всё знает про раст, примерно как ты.
Во-первых, dyn Trait — это не динамическая типизация, твой тип всё ещё должен имплементить некий трейт, чтобы ты мог получить dyn Trait.
Во-вторых, в крестах есть точно такая же хуета, когда ты используешь классы с vtable вместо определённого типа, но почему-то в таблице я не вижу static/dynamic у крестов.
В-третьих, если мы говорим про dyn Any и даункасты, такую же хуету можно получить просто кастом указателей.
Так что нет.
> а ещё думает, что всё знает про раст, примерно как ты
Спасибо за такую высокую оценку моей уверенности в себе.
>Во-первых, dyn Trait — это не динамическая типизация, твой тип всё ещё должен имплементить некий трейт, чтобы ты мог получить dyn Trait.
Да, но тут же дело в том, что он умеет проверять это в рантайме. Разве не в этом суть динамики?
>кастом указателей
Это проверяет тип?
>он умеет проверять это в рантайме
Нет, он проверяет соответствие типов в компайл-тайме. Точно так же, как кресты или сишка.
>Это проверяет тип?
Нет, но dyn Any тоже не проверяет тип, он проверяет хеш, и в теории эти хеши могут совпасть у двух совершенно разных типов. Так что в теории отличия тут нет, а на практике ты и в сишке можешь свои типы хешить в компайл-тайме макросами.
>Нет
В книжке написано в рантайме.
https://doc.rust-lang.org/stable/book/ch17-02-trait-objects.html#trait-objects-perform-dynamic-dispatch
>и в теории эти хеши могут совпасть у двух совершенно разных типов. Так что в теории отличия тут нет
Ловко ты словами сыграл. В теории могут совпасть, значит в теории отличий нет. В теории, я могу привести неоспоримые доказательства своей правоты, значит в теории я победил. До свидания.
>В книжке написано в рантайме
Там написано, что он ресолвит методы в рантайме, а не типы (точно так же, как работает ресолвинг методов на классы в крестах; ты всё ещё не показал разницу между dyn Trait в расте и dynamic dispatch классов в крестах). Типы ресолвятся в компайл тайме всегда.
>Ловко ты словами сыграл
Я не играл словами, я тебе рассказал как dyn Any внутри работает, и что даункастинг в расте ничем не отличается от каста указателей, абсолютно ничем.
Но если ты говоришь что ты победил, то ты победил, офк, удачи.
> Там написано, что он ресолвит методы в рантайме, а не типы
Ващет dyn Any именно ресолвит типы в рантайме. https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=5df16936d71d237c5da1e9470eb6b6b9
Правда с ненулевым шансом коллизий, потому что расторазрабы дауны: https://github.com/rust-lang/rust/issues/10389
Некоторые решения у них сомнительные там, но это же MSR, там ни раз направят на путь истинный.
В целом, мне думается, это будет такой "котлин" для С#, ну на самом деле не замена, а просто модный и молодежный язык для дотнета (вероятно и как замена тайпскрипта, раз так похож).
Нефига у них там в MSR весело, сидишь такой, пилишь новые языки, которые не факт даже на свет что выйдут. koka выглядит интересным
https://www.youtube.com/watch?v=Y_ts9DSIh0g
Жалко не дотянули до котлиновских лямбд (без необходимости скобой и с "it").
Хотя вариант без "стрелок" мне нравится (не знаю как другим, но вечно бесили эти -> и =>, у меня даже какой-то мышечный "затык" был во время написания).
Не знал, что в Расте нет сборщика мусора. Подчищаете malloc'ом каким-нибудь?
мимо из соседнего треда решил посмотреть чем люди занимаются
Понял. Т.е. самому разработчику не нужно париться по поводу собственноручной очистки мусора?
Нет.
Если в С++ ты сам собираешь урожай со своих грядок. То в расте ты находишься в рабстве у черного властелина Борроу Чекера, с веления которого ты собираешь урожай как ему захочется.
Борроу чекер работает только для обычных ссылок. Умные указатели живут сами по себе и обычно с борроу чекером вообще не взаимодействуют, потому что передаются по значению.
Кот в облаках ничем от локального кода не отличаются. Разве что билд-система может быть заточена под контейнеры (только зачем?).
>>34433
Сразу вспоминается тяжелой труд исследователя.
https://www.youtube.com/watch?v=xZpspMh3TFE
> Rust — невероятно быстрый язык для системного программирования
Насколько он быстрее, чем Си?
Шел 2021 год, люди до сих пор мерятся языками по скомпрометированному сайту, по скомпрометированному коду и футуристическими тестами коня в вакууме списке.
Ну запусти сырцы у себя и провалидируй результаты.
Можете не отвечать. Откуда творческим личностям знать об редких ошибках.
Безопасность не для вас молодой человек написана, это только для памяти.
ультробезопасном языке (Безопасность не для вас молодой человек написана, это только для памяти.)
парсер звездочку скушал
Потому что у нас статическая типизация, и если ты не бомж, который не может себе позволить запустить rust-analyzer, то ты всегда знаешь тип переменной и всегда можешь прыгнуть к её объявлению.
>Не по "SO: most loved" же.
Там второй любимый язык вообще имеет лисп синтаксис, так что вся эта колонка тоже скомпрометированна.
Интеллект уровня - растер.
Вообще-то это шарп со статик типами. Да и речь про затенение переменных (и я это указал).
Если что
https://dotnetfiddle.net/JUGjMU
Просто та в 9 шарфике убрали для главного стартового файла все эту ООП хрень с паблик статик воид мэин.
Имеет, просто выключена по-умолчанию, потому что в функциональных яп шадоуинг - это норма. Можно запритить в линтере, даже есть несколько уровней запрещения, вот эта строка запрещает любой шадоуинг:
#![deny(clippy::shadow_unrelated, clippy::shadow_same, clippy::shadow_reuse)]
Пока всё нравится, борроу чекер конечно обсирает часто, но понемногу въезжаю.
Дочитываю книжку из ОП-поста. Есть ли какие-то рекомендации от местных анонов что читать дальше? Алсо, может кто-то опытный, порекомендуйте что-то по компьютерной графике webgl/webgpu/основы шейдеров, текстур и рендеринга.
Бамп реквесту, тоже интересно
НУ НИХУЯ Я НЕ БОРОВЛЮ ПСИНА ТУПАЯ
У меня всё что только можно один лайф тайм имеет
Как я вобще могу бороувить что то вызовом функции, если после её завершения мутабельного референса на лексер вобще больше не существует
Так еще и если токен не возвращать неожиданно множественный бороувинг пропадает и всё какого то хуя компилиться 4 скрин
Так еще и если всё это сделать просто из мейна, создавая и вызывая лексер напрямую всё работает
вместо кода полтора часа сижу не понимаю что от меня компилятор хочет и что ему не нравится
компилятор 1 : 0 я
На самом деле это баг. Ему уже шесть годиков. Думали что исправится при помощи нлл, но оказалось слишком сложно: https://github.com/rust-lang/rust/issues/21906
Ага
Книжку одну прочесть решил про компиляторы, вот параллельно пытаюсь свой маленький сделать
> начну все в стринги пихать
Либо делай лексер тредсейф (пихай все изменения в атомики/мютексы и бери иммутабельную ссылку).
И таки я нашёл как обойти этот баг (точнее спиздил идею отсюда: https://stackoverflow.com/questions/38078936/borrowing-reference-in-structure/38080934#38080934 ).
Надо чтобы лексер помимо токена возвращал в случае успеха мутабельную ссылку на себя, которую и использовать в последующих итерациях: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ed32875ad5c336688de502f2424470b8
Жесть.
Хотелось бы результат возвращать, чтобы ошибки обрабатывать
ну можно конечно результат в опшион обернуть, но что то meh
Ну если хочешь совсем подробно как работает, то вот: https://github.com/rust-lang/rfcs/blob/master/text/3058-try-trait-v2.md Именно так оно работает внутри, но сам трейт ещё нестабилен, а значит для своих типов его имплементировать нельзя - знак вопроса работает только для Result или Option (но одно в другое преобразовывать не может).
Если говорить о расте как о функциональном языке, то эксепшны считаются нечистыми.
Если говорить о расте как о языке с небольшим рантаймом, то эксепшны могут влиять на производительность. Последнее более логично.
Куда уж нам до C++... https://gcc.gnu.org/bugzilla/show_bug.cgi?id=35412
Куда уж нам до до сих пор не унифицированного манглинга...
> Куда уж нам до до сих пор не унифицированного манглинга...
Ну, в расте его тоже нет. Это кстати, было одной из причин почему сложные структуры не стабилизировали в константных генериках - не знали как их закодировать в названии типа: https://github.com/rust-lang/rust/issues/61486
Они есть, просто называются паниками.
Мне думается, что современные кустарные разработчики не могут осилить это в рантайме и начинают придумывать всякий бред, заставляя программиста, по сути, руками пробрасывать ошибки.
Могут, паники как бы так и работают и их даже отлавливать можно. Просто специально сделали, чтобы их использование для ловли ошибок было как можно более сложным (а так вообще можно делать, правда ловиться будут только растовские паники). https://doc.rust-lang.org/std/panic/fn.catch_unwind.html
>Просто специально сделали, чтобы их использование для ловли ошибок было как можно более сложным
Нужно еще чтобы перед написанием кода программисты били себя плетью.
Какая реальная причина и почему в С++ есть эксепшены? Я не эксперт, но вероятно это требует больше усилий для написания компилятора и рантайма?
Весь рантайм уже имеется. Реальная причина в том, что выбрали возвращение эксепшенов одновременно с результатом в качестве основного способа работы с ошибками. Всё.
Новые языки нынче выглядят как халтура (го, раст, вроде свифт). Если раньше люди старались сделать жизнь программиста лучше, то сейчас делают пару фич для демонстрации, а на остальное кладут болт (точнее выпускают статью, почему это тебе "ненужно").
Checked exceptions были ещё в жяве. Плюс в расте ничего не мешает использовать Box<dyn Error> если лень пердолиться с конкретными типами ошибок.
Не люблю чекед ошибки/"ошибки это значения" (хотя я раньше был сторонником их в джаве), вообще ошибки считаю как отдельная ветвь программы (исключительная, и по большей части не для текущей ветки исполнения). Ну, типа, есть нормальная работа и редко не нормальная, на которой не хотелось бы максимально заострять внимание (а лучше пробросить до нужного контроля, и мне тут не мешала).
В общем, дело вкуса.
Ну оператор "?" и Box<dyn Error> как раз и убирают всю исключительную часть кода под капот (правда ценой боксинга ошибок). Есть даже макросы, которые добавляют ещё больше сахарку: https://github.com/withoutboats/fehler
Я не понимаю тебя. Я говорил про Box<dyn Error>, который по сути аналог Throwable из жавы. Преобразование любой ошибки со стека в Box<dyn Error> состоит в аллокации памяти и перемещении со стека в кучу. Преобразование из Box<dyn Error> в Box<dyn Error> - noop.
бля, я листнул вверх и увидел ваш полный срач про исключения, а думал, шт затираешь про бесповоротный box ошибки при ? операторе, соре, уёбываю
хотя, постойте
кто там хотел исключения?
ловите:
panic::catch_unwind()
panic::set_hook(Box<FnMut(&PanicInfo)>)
всё без асинха, хоть обмазывайся Runtime::block_on'ом при каждой обработке, ёба
им подают нормальную концепцию разделения потока исполнения проги в случае ошибки - нет, не хочу, хочу исключать говно
Говно ты даёшь. Можно вместо unwind сделать abort и вся твоя нормальная концепция пойдёт по пизде. Плюс надо чтобы возвращаемое значение имплементировало https://doc.rust-lang.org/std/panic/trait.UnwindSafe.html
Конечно можно его имплементировать вообще для всего, даже ансейф не нужен, но таким образом можно очень быстро получить сложнонаходимые ошибки.
abort - это грех
https://programming-idioms.org/idiom/120/read-integer-from-stdin/1906/rust
Ни один из этих способов и близко не похож на простой, который можно легко вспомнить при желании, что за пиздец
И чем дальше я смотрю, тем больше такого пиздеца наблюдаю
Даже с++ не кажется теперь таким оверинжиниринг куском говна
Плюсы: cin >> x;
Питон: int(input())
GO: _, err := fmt.Scanf("%d", &i)
С: scanf("%d", &n);
Во всех этих языках это 1-2 строчки вместе с объявлением и мне даже не пришлось гуглить, этот код безумно легко читатется\осознается\запоминается
Конечно, раст еще показывает все места, в котором код может свалиться, но между трейсбеком в рантайме, на написание которого я потратил 0 секунд и .expect("Failed") я выберу трейсбек
Какая разница просто или нет, если мне для такой простой операции, как чтение числа из stdin пришлось написать кучу неочевидного борлерплейта?
Я был уверен, что язык в 2021 должен помогать программисту абстрагироваться от кода и больше думать о том ЧТО написать, а выходит, что 99% времени я должен думать о таких простых вещах как каст прочитанной строки из stdin в число
Наоборот всё очевидно и единообразно. Без заклинаний.
Потому что I/O — это ебаная пизда, и раст от тебя это не скрывает. Ты получаешь ебаные байты, а с ебаными байтами всё что угодно может пойти не так. Из очевидных проблем: у тебя может отвалиться пайп, у тебя могут пойти на вход байты, которые не являются валидным utf8, у тебя может на вход попасть строка, которую нельзя распарсить в нужный тип. Всё что угодно в ебаном I/O может пойти не так.
Ты ещё забыл про то, что IO пиздец какой медленный. Куча языков делают скрытую буферизацию, чтобы хоть как-то обойти это. А в расте нихуя нет, из-за чего он иногда в десятки раз медленней в бенчмарках, где активно используется вывод в консольку без вручную добавленного буфера.
Теперь будешь знать что чтение числа из стдина нихуя не лёгкая операция
ты малость не туда зашёл с хотелками чтоб язык делал всё за тебя
раст это СИСТЕМНЫЙ язык, который должен предоставлять разработчику максимальную инфу о возможных точках отказа, а для этого они должны быть ВИДНЫ в коде, чтоб глаз мог за них зацепиться, и чтоб потом не бегать потом с ошпаренной жопой из-за прилетевшего в sentry трейсбэка на проде
Покажи как в плюсах отловить ошибку ввода? Ну т.е. ты ждешь число и что будет, если будет введено не число и как выловить эту ошибку.
Пол секунды гугла https://pastebin.com/z1X2zjRX
>>38534
Что если я гипотетически не могу использовать крейты?
>>38523
Еще раз, остальные языки развалятся в рантайме со стектрейсом из которого я пойму, что произошло, без дополнительных телодвижений. В расте же я на каждую ошибку предварительно должен написать .expect("Random error") - такая ошибка ничуть не лучше трейса (может даже хуже)
>>38626
Как .expect("Random error") решает проблему прилетевшего в sentry трейсбека?
Это и есть "вручную" из моего поста.
>Еще раз, остальные языки развалятся в рантайме
>Как .expect("Random error") решает проблему прилетевшего в sentry трейсбека?
я тебе открою страшную тайну, но раст сделан ровно для того, чтобы не разваливаться в рантайме, поэтому unwrap и expect это больше дебажные штуки, ибо паника - это действительно ненормальное поведение проги, а в проде юзают нормальные обработчики ошибок наподобие:
fn get_input() -> String {
let mut buffer = String::new();
match std::io::stdin().read_line(&mut buffer) {
Ok(_) => () // можно опустить количество прочитанных байт,
Err(e) => { делаешь с e что угодно, хоть паникуешь, хоть в жопу суёшь, если похуй }
}
buffer
}
как вариант, ошибку можно пробросить выше по стеку, изменив при этом возвращаемое значение:
fn get_input() -> Result<String, io::Error> {
// сразу ВИДНО, что функция может сфейлить, и разработчик ОБЯЗАН обработать ошибку хотя бы через unwrap(), потому что никак иначе ему до возвращённого значения, которое обёрнуто в Result, не добраться.
// как мне в питоне понять, что абстрактное int(input()) может бросить исключение, и его нужно обработать?
...
std::io::stdin().read_line(&mut buffer)?; // ? - достать значение из Result в случае успеха или вернуть из функции ошибку
buffer
}
если короче: Result<T, E> - обработка ожидаемых ошибок, паника возникает при неожиданных (если в проекте нет unwrap()/expect()/panic!()) и требует такого громоздкого синтаксиса, шоб им не хлоупотребляли
> ибо паника - это действительно ненормальное поведение проги
Кстати, злоупотребление паниками в коде аллокатора в стандартной библиотеке стало одним из препятствий для включения раста в ядро линукс. Пришлось добавлять версии функций с возвращаемой ошибкой https://github.com/rust-lang/rust/issues/86942 и пердолить способы опцией запретить вызывать паникующие версии функций: https://github.com/rust-lang/rfcs/pull/3140
ну вот, пердолят линух вместо специализации, TAITов, let-chain'ов и auto/negative impl trait'ов, эх, хоть сам бери да прись контрибьютить
Поддержку линукса пердолят не команда компилятора, а отдельные люди на зарплате. А кор тим там недавно ГАТы из экспериментальных фич вывели. Возможно скоро стабилизируют. TAIT тоже разделили на минимальную версию (с ограничениями - TAIT'ы не могут быть аргументами функций и полями структур), в которой компилятор раста точно может вывести типы и тоже возможно скоро стабилизируют.
Т.е. или fn method() {
Или через Option?
enum Some_Enum {
__some_type(String)
}
let x = Some_Enum::some_type(String::from("test value"))
Как мне, например сделать срез some_type и записать в отдельную переменную?
А, уже понял. Блять, немного напрягает что через раз этот match юзать надо. Понимаю почему и для чего, но напрягает
А как ты хотел иначе? Если преобразуешь часто, можно имплементировать трейт From: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=eda63b201bc0b68316046c4a125548ba
Ну или TryFrom, если преобразование может быть неудачным.
Ну шинапи учи
Такие штуки чтоли совсем невозможно на расте писать?
Ну конкретно этот пример можно сделать с помощи entry-апишек: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f54710a2fc538081bc48c580615e40f8
https://doc.rust-lang.org/std/collections/hash_map/enum.Entry.html
А вообще с мутабельными ссылками всё плохо, вон анон выше уже наткнулся на проблему с ними: >>37068
Понял, спасибо
Аноны, хочу ПОПЫТАТЬСЯ вкатиться к вам - сейчас занимаюсь db, plssql и так далее. Такой что да, очередной зеленый вкатун.
Есть ли предпосылки, чтобы я НЕ стал пробовать?
Живу в Гейропке и тут вроде есть пара сотен вакансий.
Спасибо за помощь
>Такие штуки чтоли совсем невозможно на расте писать?
Я на скриншоте ни одного ансейфа не вижу. Её вообще хоть пытались написать?
Ну ноги и руки тебе никто не переломает если начнёшь пробовать раст
Так что дерзай
или чего ты боишься?
Берёшь сырой указатель, потом его разыменовываешь. Никакой лайфтайм ничего не скажет.
Боюсь обосраться
Есть плюс минус год финансовой подушки, но это уже дискуссия по тематике треда. Спасибо за ответ
>Ну ноги и руки тебе никто не переломает если начнёшь пробовать раст
Это ты просто на комментаторов опеннете не виде. Будь их воля, у тебя бы сифилис начинался от одной мысли о расте.
> Это ты просто на комментаторов опеннете не виде.
Кстати да, там прям какое-то сборище любителей си, которые на си никогда не программировали. Я иногда захожу в новости с очередной уязвимостью и в первую очередь ищу коммент с упоминанием раста, а если его нет сам делаю такой.
Не имея паник в языке (или хотя бы process::exit) ты не можешь вернуть Box<dyn Error>, потому что аллокация боксы может зафейлиться. Что ты будешь делать в этом случае?
В no_std в расте это реализуется специальной функцией (помеченной как #[panic_handler]), которая никогда не должна завершаться. Например в bare-metal можно либо принудительно перезагружать процессор, либо вызывать зависание бесконечным циклом.
Проблема с кодом типа пикрил, присваивание в метче подсасывает тип первого бранча и компилятор пиздит что второе присваивание нелегитимное, хотя по сути оба опшена это инстансы того же дженерик объекта..
Мне нужно как-то указать ебучему компилятору что у sort_govna тип GovnoGeneric<impl Govno> а не GovnoGeneric<S1>
Для бекграунда — я пытался по аналогии с тайпскриптом реализовать фектори которая взависимости от входных параметров инстанциирует тот или иной обработчик, но у всех обработчиков общий интерфейс. Может в расте подобные вещи решаются иначе?
У тебя разные типы возвращаются, один S1,а другой S2. Так нельзя. Иди читай в растбуке про dyn Trait.
С impl не взлетит. Импл подразумевает что тип будет известен во время компиляции, а значит sort_govna может быть либо GovnoGeneric<S1>, либо GovnoGeneric<S2>. Тебе нужен dyn, который ресолвится в конкретный тип уже в рантайме. Например так: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c32ba7391ffe5dc52a6b9e7ad48c8dd9
Но лучше создать отдельный трейт который нужен функции a и имплементировать его для GovnoGeneric. Например так: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4ebf397427f5ea4980c1317f05f6704d
Единственный недостаток, что Box<dyn T> медленнее чем импл. Есть другие варианты, например с енумами, но там нужно уже ебстить вручную. Есть крейты для распространённых трейтов (например чаще всего нужен итератор): https://github.com/taiki-e/auto_enums но в общем они не подойдут.
> GovnoHolder
бля пока че ето я паходу..
Сделал на dyn (еще понадобилось пердолиться с Clone для моего трейта), вроде вкурил, но странно что нельзя захинтить __любой__ тип с полями дженерика и реализацией трейта....
Если писал многопоточные программы на си, то "бля, охуенный компилятор".
Если писал драйверы под экзотическое железо или только однопоточные программы, то "бля, да почему нельзя-то".
В итоге я чуть ли не дословно спиздил пример отсюда — https://github.com/lpxxn/rust-design-pattern/blob/master/creational/factory.rs и немного затвикал т.к у меня бокс является только частью объекта из метча.
Но я все еще не пойму почему при использовании енума или инстанциировании в лоб через дерево ифов компилятор выкупает что объект совместим с функцией, а в моем оригинальном варике не.. надо покурить доки...
А есть способ при вызове цепочкой аля пикрил получить резалт в блоке? или надо явно сначала объявлять/юзать метч? вызывать логику в ветках метча это не антипаттерн?
Мне кажется на пикриле тебе нужен if let. https://doc.rust-lang.org/reference/expressions/if-expr.html#if-let-expressions
> А есть способ при вызове цепочкой аля пикрил получить резалт в блоке?
Что значит получить резалт? Если нужно получить значение используй оператор вопросительный знак и пробрасывай ошибки наверх: https://doc.rust-lang.org/book/ch09-02-recoverable-errors-with-result.html#a-shortcut-for-propagating-errors-the--operator
Либо используй функции в самом Result (например map, map_or и подобные), чтобы поменять ошибку или значение в нём: https://doc.rust-lang.org/std/result/enum.Result.html
Проблема в том, что в расте нет эксепшонов, а потому простые сеттеры там не сделаешь (сахарка для геттеров/сеттеров вообще нет, как и в жяве надо вручную пердолить функции). Т.е. функция set_smth(...) должна будет возвращать Result<(), Error> - пустой результат, содержащий только ошибку (которую вызывающий код должен будет проверить). А вот как работать с ошибками - уже совсем другой вопрос. Тут можно либо заморочиться с описанием каждой ошибки, если в этом есть необходимость (рекомендую thiserror для сахарка, чтобы писать меньше кода), либо просто оборачивать строку в ошибку и возвращать её (тут рекомендую anyhow). Либо использовать всё вместе.
thiserror: https://github.com/dtolnay/thiserror
anyhow: https://github.com/dtolnay/anyhow
Я так и не ответил на вопрос. В расте сеттеры - это норма, потому что по сигнатуре функции сразу видно, что во-первых он изменяет структуру (потому что в качестве первого агрумента принимает &mut self), а во-вторых может возвратить ошибку.
>Мне кажется на пикриле тебе нужен if let.
If let позволяет достать Result::Ok и выполнить действие для успешного кейса, но если вызов зафейлился, в else ветке я не могу достать Result::Err чтобы из него дернуть значение ошибки, выкинуть ее в стдаут и выйти из функции... Пока отдыхал понял что вроде могу сделать match по мемберам Result, если метч можно юзать не только для присваивания
Плюс, у меня идет несколько вызовов потенциально фейлящихся методов подряд и чтобы не городить большую вложенность ифов я решил сделать guard clause'ы, тобишь проверять результат на ошибочность и выходить из функции.. Для этого приходится сначала записать его в переменную и только потом чекнуть is_err()
Сорямба если путано объясняю, я вкатился из веб хуйни где говнить можно любым способом, и в силу квалификации никогда не возникало потребности формулировать то че я хочу сделать в технических терминах
> тобишь проверять результат на ошибочность и выходить из функции
Я ж тебе специально ссылку дал на документацию оператора "?". Ты пишешь на расте трёх-четырёх летней давности и изобретаешь велосипеды. Сейчас уже с ошибками работать в разы проще.
>const MY_REGEX: &str = r"^\.rs$"
как мне вместо захардкоженой в коде регулярки использовать переменную
> let rege = "^\.rs$"
без вот этого r?
У меня агрументом передаётся регексп, типа такого
let rege = argv[1488]
и при запуске бинаря типа такого
./my_prog -r "^\.rs$"
Ага в принципе согласен. А есть какой-то общепринятый подход к обработке ошибок.. мб либка? У меня это могут быть меседжами из модулей, а могут быть написанные вручную, я к каждому месседжу добавляю произвольный текст и форматирую как джейсон чтобы другая софтина спалила стдаут и чето сделала... Если с ? дать всему всплыть то получится месс в main, поэтому я и решил каждую ошибку обрабатывать в месте возникновения
Тогда он у тебя уже отэскейплен должен быть, чтобы через шелл пройти, r-строка тут не нужна.
>и при запуске бинаря типа такого
>./my_prog -r "^\.rs$"
Если это баш (или вообще линуксовый шелл), то эскейпать нужно одинарными кавычками.
>А есть какой-то общепринятый подход к обработке ошибок
Пробрасывают до самого мейна() вопросиками, и там обрабатывают.
>то получится месс в main
В чём он состоит? Мейн вызывает функции, и проверяет, была ли ошибка, и прямо там же написано, что он делает, если была. Если нет, то продолжает.
> поэтому я и решил каждую ошибку обрабатывать в месте возникновения
Ага, то есть у тебя программа может прервать выполнение в любом из файлов, чтобы посложнее искать было? Это не говоря о том, что всякие стеки не анвиндит, а просто сдаётся и оставляет всё очищать ос, а какие-нибудь коннекты к дб или сокетам вообще оставляет висеть в воздухе.
Ну например к ошибке из модуля я хочу прилепить какой-то юзерфрендли текст, к самопиской ошибке сериализировать параметры че ее вызвали итд, что в свою очередь требует смотреть на ошибку в месте где она всплыла. В теории можно все реализовать в мейне или спрятать в отдельный метод, но обрабатывать на месте требует минимума телодвижений, особенно если хочешь просунуть в обработчик ошибки данные
>Ага, то есть у тебя программа может прервать выполнение в любом из файлов, чтобы посложнее искать было?
ну я руководствовался подходом типа "если функция сделала ерли ретерн то чето пошло не так но реагировать уже не надо". По поводу стека и памяти тут я банально нихуя не знаю, но разве память занятая штуковинами инстанциированными в функции не очистится при ретерне?
Ну и офк это не то чтобы сверхкритичные проблемы, прост интересно обсудить
Я не очень понимаю, что ты хочешь. Напиши на знакомом тебе языке (если знаешь много, то на си), что ты хочешь получить, потому что для меня выглядит, что ты две разных вещи смешиваешь.
Ну вот например, псевдокод. В прототипе логика свалена в одну функцию, как на пике, где разные действия требуют разной реакции на ошибку, но даже если разбить точку входа на функции с single responsibility, обработчик каждой конкретной ошибки не поменяется и имо удобнее делать это на месте
Ты снова описал своими словами в комментария, только потратил время на придумывание названий. Напиши на каком-нибудь языке, который ты знаешь, что ты хочешь.
Если хочешь просто скипнуть результат какой-то другой функции, никак её не обрабатывая, то делаешь либо .unwrap(), если ты знаешь, что она не может зафейлиться; либо if let, если тебе нужен только хороший результат; либо let _ = may_fail(), если тебе вообще всё равно.
Можешь возвращать что угодно из функции с ?, надо только обернуть в результат. То есть либо Ok(()), либо Err(()). И обновить сигнатуру функции, добавив -> Result<_,_>
> Это не говоря о том, что всякие стеки не анвиндит
Может анвиндить, правда не изкаробки. Но есть библиотеки, которые автоматом записывают в нужные типы ошибок стек при их возникновении.
>>48242
> мб либка?
Я выше давал две либы: >>47615
anyhow - по сути представляет собой парадигму строка - это ошибка. Можно ошибки комбинировать, добавляя к ним новые строки.
thiserror - уже позволяет удобно создавать свои типы ошибок.
Если нужно просто вывести ошибку и пофигу не её тип, то используй anyhow, если нужно различать разные типы ошибок и в зависимости от разновидности ошибки меняется логика программы, то тут нужен thiserror.
так блядь goвнарь ссаный я ща тебя выибу а потом выибу
во-1): где юзается '?' - там можно вернуть Result<(), Error>, просто бляд ебошиь
fn huj() -> Result<(), Error> {
maybe_error()?;
...
Ok(())
}
вовторых) пошоо нахой гуглить доки к anyhow и захват контекста ошибки с помощью anyhow::Context
в-тетьих - ещё раз нахуй ой то есть гуглить нормальную блядь растованную обработку ошибок типа
if let Err(e) = maybe_error() {
println!("пошёл нахуй по причине {}", e);
}
> типа
Ну это не очень нормальная обработка ошибок. Если ошибка фатальна и функция дальше работать не сможет, то обычно ошибка возвращается наверх при помощи оператора ? (предварительно либо засовывается в другую ошибку, либо отправляется как есть). Если ошибка не фатальна, то либо используется матч
let res = match maybe_error {
Ok(val) => val,
Err(e) => {
...
default_val
}
};
либо готовая функция из Result, например https://doc.rust-lang.org/std/result/enum.Result.html#method.unwrap_or_else
let res = maybe_error.unwrap_or_else(|e| {
...
default_val
});
Хотел был научиться писать на Расте. Есть ли какие-нибудь материалы на русском чё да как там для нубов?
https://habr.com/ru/post/537790/
Питон не компилируемый, а надо очень чтобы было. Ну и скрипты, они пока скрипты, это тоже одна из причин ухода с ПШ, дабы полновесные приложения писать с миллиардом свистелок набором применений, а не как в философии Unix.
Вся сложность строк в расте - это наличие кучи типов у каждого из которых своя изюминка:
1) str - массив байтов неизвестного размера, которые обязательно представляют из себя валидный utf-8. Сам по себе тип почти не используется (во многом из-за того что раст не имеет стабильного способа работы с типами неизвестного размера на стеке или внутри структур) и вместо него используются умные указатели с ним. Чаще всего это толстый указатель (fat pointer) на него - &str, который притворяется обычной ссылкой но на самом деле помимо обычной ссылки на массив вмещает ещё внутри количество символов в строке, а потому размер у него больше чем у обычной ссылки. Так же используются и другие умные указатели - Cow<'_, str>, Box<str> и прочее (остальное совсем редко).
2) String - по сути Vec с гарантиями, что содержимое является валидным utf-8.
Мой совет - используй везде где возможно String (потому что в отличии от &str для него не нужно пердолить борроу чекер, да и в целом проще и понятней работать), а другие типы уже используй для оптимизации кода.
> Cow<'_, str>
Хотя это не совсем умный указатель, а скорее гибрид ужа с ежом - String и &str в одном типе. Нужен для всяких оптимизаций, чтобы в функцию передавать оба типа без использования генериков.
Хорошо, видимо, я выразился косноязычно. Попробую объяснить, что имел в виду.
Я пишу небольшой сайт на расте и мне нужно во время его работы прочитать в строку один файл. Как я могу это сделать? Файл расположен на сервере
Читаешь в js, отдаёшь в wasm строку.
>В chrono нельзя даже кварталы достать изкоробки.
Я, конечно, не доктор датных наук, но это разве не месяц/4?
Так он же про дату, а не дату+время. С датой+временем там пиздец полный будет, особенно если идёт учёт часовых поясов и летнего/зимнего времени.
> добавить произвольное количество месяцев к дате
А как ты планируешь это делать? Вот 31 декабря + 2 месяца, это что?
31.14.2021
Раз это
>очевидно всем
то тогда ты с такой же очевидностью, наверное, скажешь, что будет, если к 28 февраля прибавить ещё один месяц?
На самом деле, объясни зачем тебе нужно добавлять месяцы? В теории можно добавить какой нибудь add_month_saturating_days, который добавит n месяцев и попытается сохранить день каким он и был, но в случае если номер дня больше максимальных дней в месяце, то ставится максимальный.
а че, месяц теперь определяется как 30 дней?
>>51797
бизнес логика, я дайджестю записи с датами, зачастую известны только год и месяц/квартал, иногда нахожу от этих дат производные в будущем, и группирую с точностью до месяца/квартала и как всем очевидно, в таком случае меня не интересует результирующее число месяца или упаси господи таймстамп. В итоге и пришлось пердолить утилиту чтобы корректно переносить и не падать в 14 месяц, просто странно что такой простой хуйни нет в пекедже
Даже в ноубрейновом пистоне ты можешь прибавлять к дате максимум недели, потому что дальше ты уже не можешь сказать сколько секунд содержит величина.
>а че, месяц теперь определяется как 30 дней?
Где ты 30 насчитал, аналитик? Было 28 февраля, прибавили 1 месяц, получили 28 марта.
>Почему последнее, а не 28?
пушто утилита посмотрела что находится в феврале и что год обычный, следовательно надо пойти в ласт день марта
>Если к 27 февраля месяц прибавить, то какое число будет?
27 февраля, всем очевидно
>следовательно надо пойти в ласт день марта
Почему в последний, а не в 28й?
>27 февраля, всем очевидно
Предположу, что ты оговорился и имел в виду 27 марта.
Почему 27, а не предпоследний?
а хуй знает
> только год и месяц/квартал, иногда нахожу от этих дат производные в будущем, и группирую с точностью до месяца/квартала и как всем очевидно, в таком случае меня не интересует результирующее число месяца
Раз дни хранить не нужно, мне кажется тут свой велосипед в виде отдельной структуры будет подходить лучше всего.
Так если тебе день не нужен, берёшь
https://docs.rs/chrono/0.4.19/chrono/enum.Month.html
и хуяришь вычисления прямо на месяце.
А если тебе после этого нужен будет день, то просто прихуячиваешь
let day = std::cmp::min(28, original_date.day());
А если тебе нужна нольмальная точность, то ты хуй прибавишь произвольное количество месяцев.
unused `Map` that must be used
означает, что в какой-то момент появляется некая `Map` с которой ты должен что-то сделать. Присвоить в переменную, передать в функцию, распечатать. А ты не делаешь с ней ничего, поэтому она просто дропается.
Чел... итераторы ленивые, они не вычисляются без надобности. А так код корректен. Нельзя изучать раст без знаний c/c++ и ml/haskell.
Смотря что ты имеешь в виду под "работает". У него код ничего не делает. Это "работает" в твоём понимании?
Может ему на работе за количество строк платят. В таком случае подобные варнинги действительно вредны, потому что уменьшают продуктивность. Слава богу их можно глобально отключить. Просто добавь
#![allow(unused_must_use)]
в самый верх с файл с мейном.
Чем лучше актикса? Поверхностно глянул, вроде зависимостей чуть меньше и все?
Мимо заебавшийся от количества зависимостей и времени их компиляции в актиксе
Нет, твой вопрос поставлен не верно, С++ дефакто стандарт, на нем написана куча библиотек и куча софта, к тому же С++ постоянно развивается, добавляя новые пиздатые фитчи и вот скажи мне, что такого есть в расте, чтобы разработчики которые пишут по 10-15 лет на плюсах и все компании которые пишут свой софт на с++ стали переходить на раст?
C - да, особенно у некоторых разработчиков библиотек. Но си, согласен небезопасное, говно на котором заебешься прогать что-то сложное, но оно и не надо. Нормальные люди даже библиотеки уже давно пишут на С++.
Но речь именно про Rust vs C++. Так вот давай переубеди меня человека который 13 лет пишет на С++ перейти на твой пориджеский раст.
>Так вот давай переубеди меня человека который 13 лет пишет на С++ перейти
А кто ты такой, чтобы тебя переубеждать перейти? Что-то полезное хоть написал за 13 лет?
> Нормальные люди даже библиотеки уже давно пишут на С++
Невозможно на этой хуйне писать библиотеки нормально.
Ну ты же адепт раста, ты должен зазывать меня перейти на твою сторону.
> Что-то полезное хоть написал за 13 лет?
Дохуя чего. Я, в отличии от тебя, пишу реальные приложения.
С хуяли я тебе показывать свой гит должен?
Тем более я работаю на реальной работе и пишу закрытые коммерческие приложения.
Ладно, я уже раскусил тебя по твоим высерам, ты вряд ли вообще когда-то работал в ИТ, твой максимум - хелоуворлды выкладывать на гитхаб.
>>53600
И что? И это плюс. Есть ABI, и они должны иметь несовместимость версий.
Короче бля ясно, первый адепт раста жидко пернув, умер, несите следующего.
>С хуяли я тебе показывать свой гит должен?
Так ты же пришёл рассказывать, какой ты невероятный разработчик, и как тебя должны переубеждать. А оказалось, что ты ничего и не сделал за 13 лет.
>Тем более я работаю на реальной работе и пишу закрытые коммерческие приложения.
И зачем тогда тебя переубеждать, если ты на кабанчике скачешь? На чём тебе скажут, на том писать и будешь.
Даже жабаскриптеры полезнее тебя.
> И что? И это плюс. Есть ABI, и они должны иметь несовместимость версий.
Для библиотек это недопустимо.
> Короче бля ясно, первый адепт раста жидко пернув, умер, несите следующего.
Причем здесь раст, я Си защищаю.
Если бы ты просто ничего не ответил на мой пост, то это бы выглядело намного менее жалко и позорно, чем то, что ты сейчас высрал от обиды, выдавая желаемое за действительное.
Слабо, слабо... даже адепты питона были намного более убедительны во вчерашней полемике со мной, чем "это".
>Для библиотек это недопустимо.
Это еще почему? А для чего допустимо тогда?
>Причем здесь раст, я Си защищаю.
При чем здесь Си если я про С++ vs rust говорю?
Ты троллишь тупостью или как?
Во-первых, ты пытаешься перевести изначальную тему беседы, прося у меня гитхаб и т.д. то, что к делу никакого отношения не имеет.
Во-вторых, ты кто такой чтобы требовать у меня гитхаб? Мент что ли? А если я на улице подойду к тебе и скажу давай сука сюда свой телефон, мне позвонить надо, как гопники из нулевых ты мне отдашь?
В-третьих, жопой вертишь тут только ты, макака безмозглая, воды дохуя сути нихуя в твоих высказываниях.
>оправданиями
Лол, это даже не похоже на оправдания.
И это все, что ты смог высрать? Жалкий тут только ты. Тебя наверное унижали в школе и макали головой в унитаз, давно не встречал более жалкого, мягкотелого, амебного, омежъего упыря на двачах. Ты там еще не заплакал? Ну иди чулочки надень, вставь пробку и садить писать очередной хелоу вордик на своем любимом расте.
> Это еще почему
Потому что если библиотека будет собрана одной версией компилятора, а программа, её использующая - другой, то она может тупо не работать. А может и работать. Даже тут ебучее UB, везде сопровождающее этот ублюдский язык.
> При чем здесь Си если я про С++ vs rust говорю?
> C - да, особенно у некоторых разработчиков библиотек. Но си, согласен небезопасное, говно на котором заебешься прогать что-то сложное, но оно и не надо. Нормальные люди даже библиотеки уже давно пишут на С++.
>убеждайте меня переходить на раст
>зачем?
>я программист 13 лет!
>показывай, что ты за 13 лет напрограммировал?
>рииииииии, ничего не должен вам показывать! зато почитайте мои гомофантазии!
Лол.
>П-п-п-отому что если б-б-б-иблиотека будет собрана одной версией компи-и-и-и-лятора, а программа, её использующая - д-д-д-ругой, то она может т-т-т-упо не ра-а-а-а-ботать. А м-м-м-ожет и раб-б-б-отать. Даже тут ебучее UB, везде сопровождающее этот уб-б-б-блюдский яз-з-ык.
Лол, какое-то школьное оправдание заикающегося девственника.
Еблан, там есть совместимость ABI между различными компиляторами.
И во-вторых, она даже не скомпилируется, т.к. линковка провалится.
>>53644
Школьник ебучий, не позорься.
> школьное
> Школьник
Это видимо последний оставшийся аргумент нашего погромиста на С++ с 13 летним стажем без единой строчки написанного кода.
>РЯЯЯ Я НЕ ДЕБИЛ МАМ СКАЖИ ИМ
Так я то сотни аргументов привёл, это ты как выебанная в жопу шлюха начала истерить. А начал ты истерить потому что не способен на мои аргументы привести свои какие-либо контраргументы. Типичная реакция животного, я даже тебя не виню, в том, что ты такой. Это все природа и защитные реакции, лол
> Так я то сотни аргументов привёл
"Ты девственник/школьник/шлюха" - это не аргумент. Ты просто засираешь тред своими визгами. Если твоя задача всех победить в "жаркой полемике" как каких-то там питоновцев (видимо предыдущих жертв твоих доводов), то можешь считать себя победителем и уёбывать отсюда с высоко поднятой головой.
Так ты перевёл этот разговор в такое русло, я начал нормально спрашивать чем раст лучше с++ и зачем мне и другим крестовикам переходить на него, если в крестах все отлично. Ты начал давай сюда свой гитхаб щас заценим, начал вопить ВРЕЕТИ и т.д. А теперь ты меня обвиняешь в том, что я тебя оскорбляю, когда сам же и вынудил обращаться к тебе в таком ключе. Ебать ты даже причинно-следственную связь не можешь отследить в разговоре, куда тебе говорить о более сложных вещах
Успокойся, победитель. Можешь записывать "растовчан" в свой список побеждённых шлюх/девственников/школьников рядом с питонистами и уёбывать отсюда. Твой высер даже читать не буду.
> Чем лучше актикса?
Наличием "стабильной" (насколько версию 0.X можно назвать стабильной лол) версии с токио 1. Актикс 4 (в котором тоже токио 1) уже дохуя времени в разработке, а релиза всё не видать. Плюс ублюдское разбитие самого проекта актикса на отдельные пакеты со собственным версионированием, что при обновлении бета-версии с вероятностью 90% что-то сломается.
Пассивная шлюха сдалась, ок.
Есть тут нормальные растовчане уровень которых хотя бы использование раста в проде, а не написание хелоу ворлдов для гитхаба?
Лол я полагаю ты про меня? На самом деле нормальные плюсобояре получают намного больше всех остальных, а то что показывают ваши графики зарплат по языку - бред собачий. Ясен хуй поридж не осилит плюсы на нормальном уровне чтобы получать хорошую зп, вот от сюда и эти графики.
На счёт того что я работал только в CV это опять выдаивание желаемого да действительное, я писал и сервера и hft и близкие к железу вещи, и в 3д работал, и вот щас в cv. Но судя по ощущениям на этой борде таких как в 1-3 человека максимум, остальные - это макаки на галерах максимум, либо хелоу вордщики студенты/вкатыши.
>а то что показывают ваши графики зарплат по языку - бред собачий.
ВРЕТИИИИИИИИИИИ ВАШИ ВАКАНСИИ НЕ ВАКАНСИИИИИ ЗАРПЛАТА ЭТО ТО ЧТО Я СКОЗАЛ!11!1111!111
>РРРЯЯЯЯЯ, НИМОЖЕТ БЫТЬ, ТЫ HTML ПОПРАВИЛ, МЫ ПОЛУЧАЕМ 200 БАКСОВ ЗА ЧАС
Я подготовил ожидаемый ответ за нашего порванного с++ специалиста
>Average
Ты ведь вкурсе как считается average?
Получается так из-за того, что порог входа в С++ очень высокий, чтобы получить хотя бы звание среднего разработчика. Поэтому график зарплат/skills выглядит не как линейная функция, а как экспоненциальная. И соответственно, нормальные ребята ( коих намного меньше чем всех остальных вкатышей ), а под нормальными я имею ввиду людей имеющих хороший бекграунд в CS, получаются хорошие зарплаты.
А обезьяны которые на гикбреинс купили двухнедельный курс по с++, получают низкооплачиваемую работу по поддержке легасиговнища, где их творческий максимум будет равняться работе по исправлению багов от наследия си подобных говнопрограмм которые могут дереференсить нуль поинтеры и обращаться к неинициализированной памяти.
Так что если твоя цель это быть average разработчиком, то я тебя поздравляю, ты ни на каком языке не будешь получать хорошую зарплату, а разница в колебании средних зарплат между различными языками это всего лишь шум, это копейки на которые вообще не стоит обращаться внимания, потому что хорошие разрабы уровня сеньор+ получают намного больше средних зарплат.
Уважаемый плюсопетух, вакансии находятся в открытом доступе, зарплата прекрасно считается по перцентилям. Ваши диванные размышления о экспоненциальных зарплатах разбиваются о суровую реальность. Причем речь идет о ссаном питоне, а не о расте. Вы можете сколько угодно заниматься коупингом, но от этого плюсомакаки не перестанут быть плюсомакаками, где даже топ 25% зарплат меньше чем у динамикодрисни.
Погоди, а при чем тут питон? Мы находимся в треде по системным языкам программирования.
>Причем речь идет о ссаном питоне,
Так на питоне работает много уважаемых дата саенс господ, многие из которых PhD и Dr. Ясен хуй у них будут огромные зарплаты.
Но средняя веб макака на питоне даже близко не будет нюхать такие зарплаты, да даже топовая веб макака не будет получать так.
А вот хороший инженер с степенями в CS, пишущий на С++ будет.
Т ы, глупая мартышка видимо полагаешь, что уровень зарплаты напрямую зависит от языка, но это не так, уровень зарплаты зависит от прикладной деятельности, а прикладная сфера уже определяет минимальные и максимальные границы входа и роста.
Ты пойми, что чтобы стать хорошим вебмакакеном, чтобы тебя взяли на галеру, не нужно получать ученые степени в CS и не нужно быть никаким гением, просто нужно выучить нужный фреймворк и запомнить последовательность копипаста кода.
А вот чтоб стать хорошим инженером умеющим создавать, сложные системы, тут уже так просто не получится, тут и бекграунд в CS и опыт и много чего еще нужно, поэтому таких людей очень мало, в сравнение с океаном безмозглых обезьян выбирающих язык исходя из уровня средней зарплаты на нем.
>Мы находимся в треде по
Расту. Поэтому странно тут видеть вскукареки очередного залетыша сипипимакакена, пытающегося доказать что он тру
>Так на питоне работает много уважаемых дата саенс господ, многие из которых PhD и Dr
Только 2% питоноразработчиков имеют PhD, а на нем 25% зарплат все так же больше чем у плюсомакак, при том, что это явный бекенд девелопер.
>Т ы, глупая мартышка видимо полагаешь, что уровень зарплаты напрямую зависит от языка, но это не так, уровень зарплаты зависит от прикладной деятельности, а прикладная сфера уже определяет минимальные и максимальные границы входа и роста.
Тогда тебе стоит вкатится в проституцию и завести аккаунт на онлифанс
>Ты пойми, что чтобы стать хорошим вебмакакеном, чтобы тебя взяли на галеру, не нужно получать ученые степени в CS и не нужно быть никаким гением, просто нужно выучить нужный фреймворк и запомнить последовательность копипаста кода.
Плюсомакака зачем-то начала все мерять СНГ рынком и не в курсе, что у швятых до недавнего времени практически обязательно было иметь вышку и с помоечными курсами особо не брали и в посту выше видно, что нищие плюсомакаки вовсе не вкатывальщики, а имеют минимум бакалавра при этом оставаясь низшим звеном пищевой цепочки.
Ты нахуя опять мне этими апроксимирующими графиками срешь?
Я даже твои посты читаю через строку, ибо твои маня-прогнозы на основе маняпроксимаций меня мало волнуют.
Я работаю в реальной сфере и знаю какие зарплаты кто получает.
Суть в том, что ты наивный манятеоретик жизни не нюхавший, иди выучи питон или раст и попробуй найти работу где тебе будут столько платить. Можешь не пытаться, у тебя не получится, ибо ты живешь в мире иллюзий и все твои доводы строятся на очень неточной статистике.
Работодатель не дурак и не будет платить много денег за легкую работу доступную для любого вкатыша.
Я не знаю, за что ты ненавидишь так С++, видимо потому что не можешь его осилить, а как известно человек боится\ненавидит то, чего не знает.
Но суть в том, что я и любой другой сеньор пишущий на С++, досконально знает всю архитектуру пк, алгоритмы и структуры данных, матан и всю все необходимое из CS, чтобы за пару недель\месяцев перейти на другой стек технологий если потребуется.
А вот вкатыши, фанбои, хейтеры, ну или такой школьник как ты, который под влиянием маркетинга прошел недельный курс на гикбреин по любому новомодному языку, вряд ли даже отличит баблсорт от квиксорта, и уже тем более не сможет сменить язык\стек технологий так же как "плюсомакака", хотя я не знаю почему ты считаешь что на плюсах макаки, ведь чтобы уметь хоть как-то писать на плюсах просто макакой уже не получится быть.
Вот я же не хейчу раст, ок раст, как технология с виду кажется интересным, но как замена с++, вряд ли пока что может заинтересовать тех кто уже пишет на с++ и эти люди могу сопоставить все за и против, детально разбирая каждый аспект сравнения двух языков, а местные фанбои окончившие пту вчера работавшие кассирами в пятерочке, начинают с пеной у рта срать на весь тред хуйней абсолютно не по теме. Даже твои наивные рассуждения о зарплатах уже многое говорит о тебе, ты безмозглый фанбой, ты флюгер который показывает туда куда дует ветер, у тебя нет никаких знаний в CS, ты просто пустозвон, ты никогда не будешь нормальным программистом получающим нормальную зп ( я даже не говорю о хорошей ). Так что самое лучше что ты можешь сделать сейчас, это согласиться со мной, очистить историю посещений, и навсегда забыть об этом разделе, а потом вернуться в реальную жизнь, где ты пойдешь работать на стройку за 20к рублей, а не будешь тут фантазировать об огромных зарплатах питономакак.
По существу изначальной темы не было ни одного вразумительного аргумента в пользу того или иного языка. И не будет, потому что 98% тех кто тут сидит такие же безмозглые вкатыши, с нулевым опытом в айти как и ты
Ты нахуя опять мне этими апроксимирующими графиками срешь?
Я даже твои посты читаю через строку, ибо твои маня-прогнозы на основе маняпроксимаций меня мало волнуют.
Я работаю в реальной сфере и знаю какие зарплаты кто получает.
Суть в том, что ты наивный манятеоретик жизни не нюхавший, иди выучи питон или раст и попробуй найти работу где тебе будут столько платить. Можешь не пытаться, у тебя не получится, ибо ты живешь в мире иллюзий и все твои доводы строятся на очень неточной статистике.
Работодатель не дурак и не будет платить много денег за легкую работу доступную для любого вкатыша.
Я не знаю, за что ты ненавидишь так С++, видимо потому что не можешь его осилить, а как известно человек боится\ненавидит то, чего не знает.
Но суть в том, что я и любой другой сеньор пишущий на С++, досконально знает всю архитектуру пк, алгоритмы и структуры данных, матан и всю все необходимое из CS, чтобы за пару недель\месяцев перейти на другой стек технологий если потребуется.
А вот вкатыши, фанбои, хейтеры, ну или такой школьник как ты, который под влиянием маркетинга прошел недельный курс на гикбреин по любому новомодному языку, вряд ли даже отличит баблсорт от квиксорта, и уже тем более не сможет сменить язык\стек технологий так же как "плюсомакака", хотя я не знаю почему ты считаешь что на плюсах макаки, ведь чтобы уметь хоть как-то писать на плюсах просто макакой уже не получится быть.
Вот я же не хейчу раст, ок раст, как технология с виду кажется интересным, но как замена с++, вряд ли пока что может заинтересовать тех кто уже пишет на с++ и эти люди могу сопоставить все за и против, детально разбирая каждый аспект сравнения двух языков, а местные фанбои окончившие пту вчера работавшие кассирами в пятерочке, начинают с пеной у рта срать на весь тред хуйней абсолютно не по теме. Даже твои наивные рассуждения о зарплатах уже многое говорит о тебе, ты безмозглый фанбой, ты флюгер который показывает туда куда дует ветер, у тебя нет никаких знаний в CS, ты просто пустозвон, ты никогда не будешь нормальным программистом получающим нормальную зп ( я даже не говорю о хорошей ). Так что самое лучше что ты можешь сделать сейчас, это согласиться со мной, очистить историю посещений, и навсегда забыть об этом разделе, а потом вернуться в реальную жизнь, где ты пойдешь работать на стройку за 20к рублей, а не будешь тут фантазировать об огромных зарплатах питономакак.
По существу изначальной темы не было ни одного вразумительного аргумента в пользу того или иного языка. И не будет, потому что 98% тех кто тут сидит такие же безмозглые вкатыши, с нулевым опытом в айти как и ты
>Суть в том, что ты наивный манятеоретик жизни не нюхавший, иди выучи питон или раст и попробуй найти работу где тебе будут столько платить. Можешь не пытаться, у тебя не получится, ибо ты живешь в мире иллюзий и все твои доводы строятся на очень неточной статистике.
СПИСОК ВАКАНСИЙ НЕ ЗАКОН - Я ЗАКОН
Сениор сипипи, не останавливайся, прошу продолжай
https://www.youtube.com/watch?v=OxRTGMe_RuE[РАСКРЫТЬ]
https://www.youtube.com/watch?v=4BlpONgj74A[РАСКРЫТЬ]
https://www.youtube.com/watch?v=Vq1lxeg_gNs[РАСКРЫТЬ]
https://www.youtube.com/watch?v=XuOm-RTQxVU[РАСКРЫТЬ]
Все описанное в этих роликах стало бы попросту невозможным если бы прошивки этих соснулей и игры для них были написаны на RUST.
Пруф ми вронг.
хорош, респектирую
Молодец, анон. Все правильно написал.
Потому-что он дурак не знает что несёт.
Везде можно.
Мне не для работы, я и так веб макака, вот душа лежит выучить что-нибудь из этих двух, но не могу выбрать. В перспективе хочу чисто ради фана программирование - это же пиздец весело пописать 2Д игрушки какие, не используя какие-нибудь мега энжины типа unreal.
я собираюсь писать игрушки не ради игрушек, а ради попрогать либо на расте либо на плюсах. и пофаниться. мб если попрет и 3Д поделаю
а еще я рот ебал JS
Твой вопрос какой-то нелогичный. Ты говоришь, я собираюсь учить один из этих языков, чтобы писать игрушки, но писать игрушки буду не ради игрушек, а ради языка. Зачем ты тогда вообще игрушки упоминаешь, если этот факт по сути на выбор не влияет. Да еще и приходишь в растотред и спрашиваешь, что выбрать, раст или другой язык. И какой ответ ты хочешь? Конечно же не раст.
я хочу учить один из этих языков, по ходу дела буду пилить игрушки по фану. Т е приоритет учить язык, второе писать игрушки, ясли я не выполняю первый пункт, мне и второй нахуй не нужен.
> Зачем ты тогда вообще игрушки упоминаешь
>Да еще и приходишь в растотред и спрашиваешь, что выбрать, раст или другой язык. И какой ответ ты хочешь? Конечно же не раст.
потому что на данном этапе мне похуй что учить из этих 2х, для меня что-то что это. упоминаю чтобы ты понял примерно для чего я буду язык использовать. Может ваш раст годен только там хз, для крипты, и еще какого-нибудь ультра безопасного ПО для банковмое стереотипное мнение. А игры на нем только ебланы будут делать.
>>56637
спс, братик, так у меня тайловый графоний будет, без выебонов
Так ты потом тридэ хочешь. Тридэ в расте твой рот выебет, всё равно на биндингах писать будешь.
Но для общего развития раст намного лучше крестов. Когда у тебя свой borrowck в голове появится, ты и в других языках начнёшь понимать, почему твои программы — дерьмо.
> Тридэ в расте твой рот выебет
Триде на любом языке рот выебет, в одиночку писать движок такая себе затея. Да и компиляция раста в шейдеры пока что оффициально не поддерживается, так что там использоваться свой С/С++ подобный язык без вариантов.
ну я вот пока тоже склоняюсь к плюсам.
то честно говоря я даже не очень понимаю насколько сильна проблема, которую решает раст, я про борроу чекер и про всякое описание жизни ссылок, на мой неопытный глаз проблема преувеличена, чтобы так надрачивать компилятору. Мб когда попишу на плюсах что-то сложнее универских лаб, тогда пойму зачем запилили раст.
спасибо
>Так ты потом тридэ хочешь. Тридэ в расте твой рот выебет, всё равно на биндингах писать будешь.
https://www.youtube.com/watch?v=3tOdwmRWLKw
> Да и компиляция раста в шейдеры пока что оффициально не поддерживается
А компиляция чего в шейдеры поддерживается?
Ты же понимаешь, что независимо от языка программирования шейдеры ты один хуй будешь писать на GLSL если мы говорим про OpenGL
Какая тогда разница?
Лучше бы сказал про то, что нет нормальной библиотеки, чтобы не писать свои велосипеды.
Сори, я мимокрокодил. Просто люблю, что в шейдеры компилируются шейдеры, а в ассемблер — ассемблер.
Но вся математика в графике сегодня. Генерация это здорово, но можно спокойно 2n алгоритмы применять, и никто этого не заметит, потому что делается это только один раз в самом начале.
>Расскажи про известных математиков-авторов игр?
Речь не про "известных математиков", речь про базовые знания, до которых тебе как до Луны. За языки он тут пришел трепаться, неуч сраный.
> GLSL
Вообще есть ещё SPIR-V, который работает в том числе и в опенгл (относительно новых версий) и позволяет использовать любой язык, который умеет в него компилироваться.
>>57162
>>Расскажи про известных математиков-авторов игр?
>Речь не про "известных математиков", речь про базовые знания, до которых тебе как до Луны. За языки он тут пришел трепаться, неуч сраный.
эт другой анон спросил, не агрись плиз на него, спрашиваю за языки я.
кстати да, нахер мне математика чтобы написать пару-тройку паршивых 2д платформеров, которые увидят только я и мб твоя мама?
То есть замечают? Это потому что там n! алгоритмы. Такие вот из математиков разработчики игр.
Есть одна либа на расте. Хочу поднять веб-сервер, который будет принимать POST multipart/form-data, использовать эту либу и возвращать ответ.
Что посоветуете, чем богаты?
ебани сервер на ноде, если на расте не делал нихуя то заебешься, нодой пиши формдату в файл и просовывай через spawn/exec в забилженный бинарник своей раст проги
О, спасибо
> n! алгоритмы
Ты от балды сказал или реально исследовал тему?
Я сам в теме не разбирался, но мне очень не верится, что математик бы позволил себе использовать O(n!) алгоритм, если есть возможность использовать алгоритм быстрее.
Как это - лицензия языка?
Шопенгауэр ты?
Так я уже, по линуксы не видно что ли?
Не сложнее раста. С ума сошёл? Там синтаксический сахар вместо программирования, за тебя практически всё делает IDE.
Ну а он, как видишь, не справился.
Шарпы заебюатый язык, до сих пор пишу на нём всякую консольную хуету, уровня реализаций логики кубика рубика и алгоротмив сортировки ,многопоточность, написал недавно свой неофетч на шарпе, заебатый язык на самом деле, ещё синтаксис очень просто, особых знаний не нужно что бы его понимать, они ещё сильнее упростили язык в sdk6 и десятой версий шарпа
Но почему я сьебал с него на время? да потому что компилер моно что на лине может только в седьмую версию шарпа, ещё он не может в граф приложения, а это пиздец, даже графчиесткую хуйню с логикой и кубами сделать не могу, ну пиздец, лучше бы тогда учил плюсы ей богу блядьъ
а раст, раст для школьничков смузихлёбов - мне на опеннет так сказали, ну я решил попробувать, и пока он мне не особо нравиться в сравнений с шарпом, ещё этот ебанный компилер сука, пока только сегодня чить начал, думаю написать калькулятор, сделать много скриншготов и выложить в r/unixporn свою хуйню, и можно будет возращаться к шарпам
> ещё этот ебанный компилер сука
Уебанский компилер! Надо всего лишь написать cargo run/cargo build и всё будет работать!!! НУ И ХУЙНЯ!
проиграл, но ваще с шарпами и моно так же
csc test.cs
mono run.exe
Ваще, я имел ввиду что компилер высирает какието ошибки по мелким причинам, А шарпы к примеру вообще всё сжирают
> думаю написать калькулятор, сделать много скриншготов и выложить в r/unixporn свою хуйню, и можно будет возращаться к шарпам
> Уроки сделал? порфтель собрал?
Ну не позорься, чел
> А шарпы к примеру вообще всё сжирают
Шарпы потом на каждом пропуке в рантайме высираются ошибками, которые к тому же разобрать невозможно.
Тебе же английским языком написано function is never used. Догадайся, что сделать надо?
Тем более это не error, а warning, тебе даже в конце написало, что сборка завершена успешно.
Возвращайся на шарп лучше сразу.
я про это знаю бля, но почему тогда не вывело что мне нужно? да и где использовать функцыю если она выполняет определённый код? иле компилер хочет что бы я записах another_funtion в main()?
> иле компилер хочет что бы я записах another_funtion в main()?
Как ты умудрился заставить функцию выполнять определённый код, не засунув её в main()?
и првда
помню читал главы две три назад но уже забыл
А вобще не будь мразью и слушай что тебе ворнинги говорят
Потому что смешнее будет если он дропнет раст из-за строк (и количества их разновидностей) и борроу-чекера, чем от невозможности заглушить варнинги.
Нет, не смешнее.
Ты прикинь, чел дропнул яп из-за варнинга по поводу наименования функции, это же ухахатбл
>найти работу
>на расте
пчел, нах мне работать на этом языке, я же не школьничег смузихлёб, лол, для работы есть пыха и прочея вебпараша, раст, кресы, пёрл и прочие подобные языки это для школьников которым нехуй делать на каникулах энтузиастов, понимаешь? так же как и линукс
> даже едой не платят?
маняфатазий местынх школьников, сам делал заказы на пыхе на фрилансе, и да сука, платили копейки, зато за месяц работы обновил пеку и купил сиси ди на 480 с алика, балею щас, но не суть, у меня друг работает на пыхе+лара и получает свой 1500 баксов поживая в хохляндий, пыха хароша тем что можно легко вкатиться, и заказов много, работы много, вообще never die
Офк, это же элементарно, там же почти читать не надо, алсо я читал оф доки и метанит, да и там всю базово и элементарно
Если задаешь такие вопросы, то нет, нельзя. Да и без тебя уже справились: новые игры перевести в вебассембли без шансов, а для ретро (дос, консоли) архив.орг.
>Аргумент невер юзед
>Аргумент
>невер юзед
У тебя место только под один аргумент в принтовой строке, компилятор не знает куда второй аргумент вставить.
А, понятно, ты просто троллишь. Файл не сохранил, и спамишь на двач своими ошибками.
У тебя там хардкорная статическая линковка с сишными либами? Или ты просто долбоёб?
а нахуя мне под каждый пук отельный проект с папками создовать? когда я могу свою маленькую хуйню компилить из файла?
>даже с перла
Не надо про перл. Вполне хороший язык, только его пик популярности давно прошел горизонт.
Ах, этот шитпостинг тупизной.
Поразительно, по множеству тематик наплыв таких долбаебов буквально неделю или две назад начался.
Вахтер, спок. Если хочешь раст иди читай доки, общайся в issues
фантазёр спок, иди уроки делай, может перестань путать мимоАнонов со свойми протыками
Протыкл артём семёнович, это имя твоего гулаговского деда. Которого воры попротыкали туберкулёзными хуями за отказ брать на себя норму паханов.
Ты английского языка не знаешь? Он же тебе объясняет, что функция ничего не возвращает. И подсказывает ; убрать.
блять, и правда, thx
Он тебя троллит, а ты ведёшься.
Да, я это уже и решил, там нужно было передать значение, теперь вроде очевидная проблема
Вот по этим ставил, с 4 раза, первый раз проебался с разметокой, потом 2 и 3 раз проебался с загузчиком
но в итоге за два с лишним часа накатил свой арч линупс
https://itsfoss.com/install-arch-linux/
https://wiki.archlinux.org/title/installation_guide
Алсо, проблему я уже решил, и калькулятор почти работает как надо
Нахуй ты отвечаешь ему? Это толсто нереальных масштабов, а ты ведешься, даже стыдно за тебя.
>2159253 (You)
>2159268 (You)
>2159280 (You)
>2159282 (You)
>2159409 (You)
Таблетки.
хэй! мимокрокодил, почитал немного тред, но невнимательно и нифига не понял, какие интересные фичи у языка есть. знаю плюсы, учу хаскель, что раст их них позаимствовал, чего не хватает?
ты не поймешь те лекции ибо те лекции на людей которые пришли с плюсов и которые знают что делают и как это работает.
Мой тебе совет, не теряй времени, скачай три тома книг столярова и прочитай их. После этого растбук и лекции пойдут как с молоком матери.
сайт - stolyarov.info
1. Программа по сути является неким кэширующим прокси-сервером.
2. Если в кэше нет нужной записи, то сервер блокирует поток, идет за оригинальным ресурсом и отдает его клиенту.
3. Если в кэше есть нужная запись, но она устарела (например старше 60 секунд), то сервер отдает ее клиенту сразу и обновляет кэш в фоне.
4. Если почти одновременно на сервер пришли за одной и той же записью сразу два клиента, то за оригинальным ресурсом должен отправляться только один запрос. Например если записи нет в кэше, то для первого клиента отправляется запрос на оригинальный ресурс, а второй клиент дожидается его результатов вместе с первым. Если запись к кэше устарела, то после отправки первого запроса в фоне, новые запросы за теми же данными отправляться не должны (до его завершения).
Я все никак не могу взять в толк, как же правильно это сделать. Набросал пока пикрелейтед, но здесь не выполняется пункт 4 (да и по остальным пунктам вопросы, например стр. 32). Пока единственная идея - завести HashMap<String, Mutex<bool>>, где String будет неким идентификатором данных, а флаг будет говорить о состоянии запроса (идет запрос в данный момент или нет). Проблема в том, что (на мой взгляд) тут проще простого словить PoisonError и наебнуть весь сервер целиком. Подскажите, в каком направлении копать?
Если соло разрабатывать, то ты закончишь в тот момент, когда это перестанет быть кому-нибудь нужно, все в облаке будут играться.
Проще заработать денег и купить фирму с прогерами, чтобы тебе это сделали.
Такой хуйней вряд-ли бы стал кто-то заниматься
Отвечаю себе. Еслть хуйня называется serenity вот эта хуета позволяет работать с апи дискорда, также есть songbird от этих же разрабов, но эта хуета для войс чатов.
https://github.com/serenity-rs/serenity
https://github.com/serenity-rs/songbird
Ты будешь отличным психологом.
алсо, почему то кажеться что тред одновременно и жив и мёртв
Ты если английский не знаешь, то хотя бы переводчиком пользуйся
Ты два раза берешь мутабельную ссылку на переменную, в расте так нельзя
Можно много иммутабельных и лишь один мутабельный референс на переменную
Я в анлюсике нормально освоислся, как монимум видосы на ютубе с сабами могу смотреть и балдеть, но беда в новых языках сложна, ибо новые слова и приходиться много гуглить, но думаю это времиенно, пока только вкатываюсь, у меня же меньше недели с начала вкатывания, потому думаю со временем привыкну, да и я уже далеко не с каждой самой мелкой проблемой сюда бегу, только если что то долго не получаеться решить
Я только несколько дней вкатываюсь в язык, по метаниту и докам, раньше писал жиес и шарпе, потому не привык к синтаксису и логике работы подобных языков,но это временно, я быстро обучаюсь, через неделю две уже такой хуйни скорее всего не будет
Он уже сам с собой разговаривает, просто пройди мимо.
>
>
но ведь это так, на линуксах и маке куда удобней писать на расте, ещё с учётом вима, и ладно бы похуй на вим, не ради вима на линухе идут, но это же охуенно быстрая и удобноая система, а писать на расте из под винды какой то крайне костыльный метод, проще на линуксах
>Я работаю в реальной сфере и знаю какие зарплаты кто получает.
>Суть в том, что ты наивный манятеоретик жизни не нюхавший
Смотрю ты нанюхался нафталина и смотришь на мир через свою призму. Может еще и на оборонном заводе работаешь, производя ненужные штуки за 25 в месяц
>недельный курс на гикбреин по любому новомодному языку
Очнись, дедуль, тот же питон уже давно не новомодный, даже на Go не первый год уже пишут, плюс за неделю ты максимум хэлоуворды напишешь, а чтобы взяли на работу нужно еще дохуя всего знать помимо языка.
>Я не знаю, за что ты ненавидишь так С++, видимо потому что не можешь его осилить, а как известно человек боится\ненавидит то, чего не знает.
А ты агаришься потому что не можешь осилить тот самый простой бэкенд для вэбмакак и так и работаешь в своем подзаллупном НИИ за копецки и даже в rust походу не осилил
>вряд ли даже отличит баблсорт от квиксорта
Это не нужно знать в вебе, вот прям совсем, если дело дошло до того что нужно оптимизировать сортировку и погружаться в алгоритмы, то это либо хайлоад типа яндекса, либо ты что-то делаешь не так. Даже не знаю почему этими алгоритмами некоторые дрочат на собесах.
Вообще этот твой высер выглядит как-будто автослесарь доебывает дальнобойщика что тот не может отличить разные типы топливных форсунок. Писать код на плюсах под железки и писать для вэба на питоне это разные сферы как стоматолог и гинеколог. Любой вкатун бэкендер будет знать лучше тебя что происходит с момента нажатия кнопки "отправить" на дваче до появления на мониторе отправленного поста.
друг писал простенький си-компилятор на расте. Дерзай хули
>тот же питон уже давно не новомодный
Питон старше жабы и жса, так-то.
>>60614
>даже на Go не первый год уже пишут
Да толком ничего и не пишут. Есть какие-то места вроде озона и вайлдбериса, где есть агрессивные пиарщики ГОвна, но дальше он так никуда и не проник. Думаю, через несколько лет он станет чем-то вроде ruby по популярности и тенденциям в развитии.
Ну как вариант напиши типобезопасный MapReduce поверх Tokio. В качестве кандидатской пойдет оптимизатор его DAG с выносом маленьких ступеней (что влезают в RAM квоты) в локальные очаги вычислений. В качестве докторской подтянешь на машобчике более эффективный shuffle, оценку skew данных при join и размазывание ступеней по нодам исходя из предсказанных IOPS. А потом продашься с потрохами за пару миллионов какому-нибудь стартапу-переростку в долину. Если не нравится идея, спрашивай еще, у меня таких миллион.
>Есть какие-то места вроде озона и вайлдбериса, где есть агрессивные пиарщики ГОвна, но дальше он так никуда и не проник.
>мерить популярность языка по СНГ
>Да толком ничего и не пишут.
Микросервисы и много где, особенно в банках и финтехе полюбили его даже в некоторых случаях монолиты с жабы на микросервисы на го переписывают У нас на работе даже прошивки для кое-каких коробочек пишут и плюс работат на бэкенде где потоки с видео/аудио. Остальное все на рельсах.
>места вроде озона и вайлдбериса
Микросервисы с хайлоадом и множеством всяких вычислений, собственно под это в гугле его и разрабатывали.
>ruby по популярности и тенденциям в развитии.
Да, да умирает и не развивается поинтересовался бы для приличия прежде чем что-то писать
бамп
От души, анон.
Какой блядь пойсон эррор, просто возьми AtomicBool. А если у тебя будет тип, который не влезает в атомик, то берёшь parking_lot::Mutex, там пойсонов нет (потому что они не нужны, если ты не пишешь ансейф).
А если ты таки хочешь стандартный мутекс, то просто берёшь и не паникуешь на пойсоне, разворачивая ошибку в данные, там специальная функция into_inner() есть как раз для этого.
>хотя НЕМНОГО на перечислениях потупил
>дошел до пакетов и вот что-то прям хуево понимается
мл нужно учить.
И сишку. Т.е. с сишкой и млем не будет проблем ни с перечислениями, ни с пакетами. Алсо, в растбуке предпологается, что ты не зелёный в программировании, т.е. теорию о типах, архитектуре, сетях и т.д. знаешь.
На одном расте можно работать? Чтобы без всяких плюсов.
Вообще подумываю так слегка из бекграунда ios и android, по 2 года в каждом. Ржавый похож сильно на свифт, синтаксически. Приятно думаю вам писать на нем.
И как вообще дела с вакансиями?
Вакансия пока что самая грустная сторона раста, кратко говоря работы нет
> приятно вам на нем писать
Всем сердцем ненавижу компилятор и бороу чекер, но Бэк на нем писать достаточно приятно
> Всем сердцем ненавижу компилятор и бороу чекер
Так он же помогает делать так, чтобы программа потом в рантайме не развалилась.
Обычно да, а иногда только мешает писать так как хочется
А чего ненавидеть-то, ну оберни что надо в Rc, да и все.
Да это допизды просто , я раза с 4 только осилил устоновку, и то пиздец, у меня скринфетч компилиться 1 час с лишним, ну его нахуй, ещё драва и граб в прршлые разы сломал, пиздец,я в линуксах на самом деле не долго, месяца 4 назад начал вкат, но генту для меня это всё же лишним времязатрано и долго, я и так три дня компилил и пересобирал систему, ибо пизбей сколько ошибок, потому ну нахуй, пидора/рач остаються мейн-дистрами для разработки
>>64519
Иначе никак
Ты тот самый чушка, который каждую ошибку постил сюда и засирал треды своими скринами пидорача с анимешными картинками?
>я в линуксах на самом деле не долго, месяца 4 назад начал вкат
>генту
Ты долбоеб? Ставь убунту, ну или федору для начала. Генту совсем для красноглазых и бородатых
Не пизди. Я первые пару месяцев линукса дистрохопился между колясками типа убунты, федоры и дебиана, потом резко полез на арч, а потом сразу на генту. Ничего сложного для красноглазобородатых там нет, достаточно уметь читать хотя бы по русски.
Проблемы могут возникнуть разве что на каком-нибудь экзотическом железе, но они возникнут вообще на любом линуксе.
всё так, разве что заебёшься компилить на каждый пук по 20 минут, а так заебись, ещё рач и пидора норм, но что бы пидора была вполне юзабельно нужно много её напердолить
> Ставь убунту, ну или федору для начала.
неосилятор плез, я до этого сидел на раче, а щас на пидоре, нахуя мне эти вечноломающийся сами себя коляски?
я тебе так скажу, анон.
Тебе от силы 16-20 лет. И ты не работаешь.
Ты понимаешь что все это хуйня? Пока ты ебешься с этим, нормальные люди делают деньги. А ты нихуя не делаешь.
Больше мне нечего сказать. Пока.
>Тебе 17 лет
> И ты не работаешь.
Раньше работал, делал заказы заказы на фрилансе, сайтики клипал, но как я заработал себе на пеку и прочию отрибутику, забросил потмоу что слишком заёбисто, занимает много времени и сил, ничего кроме как править кривой сайт в жизни не занимаюсь в этом время, да и кодинг мне мало интересес, хочу вкатиться в сисьОдмены пока могу, ведь это мне куда интересней
>Ты понимаешь что все это хуйня?
Это охуенно интересно и сложно, рили, и даёт глубококе понимаеи как работает система, немало опыта, идёт как проверка на прочность, я немало узнал и понял, ещё я очень быстро учусь, потому мне такое нравиться
(Автор этого поста был забанен. Помянем.)
>Пока ты ебешься с этим, нормальные люди делают деньги.
Представил с каким ЕБАЛОМ и ПРИДЫХАНИЕМ ты сказал "деньги" и проиграл.
Деньги как смысл жизни так себе затея.
Но зато ты НОРМАЛЬНЫЙ, так что не бери в голову. Ты молодец! Удачи!
https://github.com/clap-rs/clap
Нет, ты не понял, зачем мне атомик? Мне нужно, чтобы остальные треды засыпали, пока первый не закончит работу. Впрочем я уже понял, что мне нужен Condvar (которому один хуй требуется Mutex).
За вниманиеблядство.
школьничек спокизи, я уже осовйлся и с компилятором и продолжаю изучать и писать конкретные проекты
как напердолить итератор для двух разных структур, если они обе поддерживают итератор?
я пытался сделать свою кастомную, которая держит оригинальную и имплементнуть для нее итератор, тобишь функцию next в которой я метчился по оригинальному типу и возвращал next или одного итератора или другого, но там какие-то разные имплементации, и я чет пососал....
https://ru.stackoverflow.com/questions/1318665/rust-как-убрать-лишний-мусор
Первая ссылка в гугле же
о бля во первых спасимбо, во вторых я б никогда не подумал гуглить такую тему на русике а на англ не выдавало
std::iter::zip?
собирает многопоточно, перелинковка (тупо добавил пробел и собрал) заняла 10 сек на моём 2665 (8/16@2.8)
До этого было что-то в районе 1.5 минут
по зависимостям у меня так
cargo tree|wc -l
985
Ау, растаны, чего заглохли?
ОП, добавь mold в шапейку нексттреда, для тех, кто заебался ждать переконпеляции (на самом деле перелинковки) после правки пары строк.
хуй знает, какая-то слишком сложная хуйня для мя...
но попутно вопрос, за то время что я писал на расте я видел дохуя инструментов заявляющих что они "самые быстрые в классе" и бля, они действительно самые быстрые если ты осилил непонятный синтаксис. В чем подводные, как достигается ебовейшая скорость?
>какая-то слишком сложная хуйня для мя...
Ебать, а я-то думал, что я на расте самый тру-смузи-хипстер.
Там всё тупо: по инструкции собираешь, потом /path/to/mold -run cargo build.
Что касается скорости софта на расте, то на нём легко и приятно писать многопоточные приложения, также есть удобные обёртки над SIMD.
Что каcается mold, то он не на расте написал, просто оче быстрый линкер. Ещё lld можно попробовать.
>ОП, добавь
Старый ОП пропал, а я только последные 2 треда перекатывал. Н и вам придется нового ОПа найти, потому что я с двачей ухожу.
Нашёл работу на ржавом?
Чё пацаны раст?
Почему сразу тяночку-то? Может, трапика нашёл, и теперь вместе няшатся, пушат друг другу коммиты.
А как так выходит, что сраст быстрее си, но медленее плюсов? Растодебил на админе так и не пофиксил данный конфуз?
На сишке писать неудобно. А кресты быстрее потому что там unsound на unsound и UB на UB.
ну так раст не плюсы, зависимости в 2 клика добавляются
так что не вижу проблем, тем более если разрабам легче
- Нормальный СИНХРОННЫЙ интерфейс. Асинки и авайты идут в задницу, не вписываясь в архитектуру абсолютно.
- Простота. Мне не нужны миграции, васяноутилиты управления проектом, getting started длинной в "Войну и Мир" и прочая шляпа (привет, diesel, и пока), просто хочу подключить библиотеку, шлепнуть #[derive(VotEtoOtobrazi)] на структуры и юзать.
- Отсутствие необходимости постоянно писать SQL-запросы вручную (нет, мне не трудно совсем, но нахера тогда ORM, если все вручную делать?).
- Поддержка хотя бы основных СУБД (SQLite / MySQL / Postgres).
Когда-то давно на сишарпах использовал https://github.com/FransBouma/Massive - вот что-то подобное было бы очень кстати.
Охуеть ты комбайн себе хочешь, конечно. Смирись с тем, что все комбайны давно пересели на асинк и научись вызывать его из синхронного кода с помощью block_on.
Мне как раз комбайн не нужен, мне нужна маленькая и простенькая библиотека, которая умела бы в прозрачный CRUD над POD, только и всего. И чтобы она до кучи была синхронной. Все.
Тот же Massive, ссылку на который я дал выше - по сути один файл исходного кода и несколько адаптеров для конкретных СУБД. (При этом он еще и в асинк умеет для тех, кому нужно.) Неужели в современном мире стильно-модно-молодежной разработки такого больше не делают?
> Смирись с тем, что все комбайны давно пересели на асинк и научись вызывать его из синхронного кода с помощью block_on.
Это дикие и корявые костыли, которые придется по всему коду расставлять или писать макрос, втыкающий эти костыли за меня... Хуевый вариант
Ты хочешь слишком много для бедного раста.
С учётом того, каким говном являются макросы в расте, если ты хочешь не писать SQL руками, то тебе остаются только пляски а-ля дизель с отдельными файлами описания схемы и т.п.
Нет никакой возможности получить информации о типах в рамках всей программы.
Соответственно, макросы очень ограничены в плане того, что они могут делать на дерайвах, аннотациях и т.п.
Ну с твоими хотелками можно в дизель попробовать, он не сильно и страшен, на самом деле.
Потому что все альтернативы проще заставят писать sql руками
Просто у них даже хелловорлд начинается с какой-то энтерпрайзной херни с миграциями + установкой своего консольного инструментария. У меня три таблицы с четырьмя колонками каждая, зачем мне все это?
trait Block {
fn wait(self) -> <Self as futures::Future>::Output
where Self: Sized, Self: futures::Future
{
futures::executor::block_on(self)
}
}
impl<F,T> Block for F
where F: futures::Future<Output = T>
{}
Теперь после любого асинхронного вызова можно сказать .wait() и все.
Самое смешное, что раньше в futures был такой вызов, но потом его зачем-то выпилили - видимо, чтобы люди безальтернативно страдали с асинками...
> энтерпрайзной херни с миграциями + установкой своего консольного инструментария
Скипаешь, сразу делаешь свои структы и пользуешься только орм.
Это копия, сохраненная 21 мая 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.