Rust — невероятно быстрый язык для системного программирования без segfault'ов и с гарантиями потокобезопасности.ИТТ мы можем объяснить базовые и продвинутые концепции языка, и программирования в целом, поможем вкатывающимся, подскажем что выбрать для веба, игр или, прости Абу, блокчейна.https://www.rust-lang.orgПродолжение шапки: https://gist.github.com/TatriX/183c816f1346d418f969c4576c2b9b41
Тут говорят, что rust для системщины. А что лично вы на нём написали для системщины, или хотя бы собираетесь писать?
>>1463514седьмой ушёл в бамплимит https://web.archive.org/web/20190801205410/https://2ch.hk/pr/res/1369496.html
>>1463413>rust для системщинысистемный, не значит для. Значит, что он наиболее близок к ос и железу. Например, использует системные потоки.
>>1463625На Си тоже можно писать не только системщину, но мы же понимаем, что для прикладного ПО лучше всего подходят языки со сборщиком мусора.
>>1463787>мы же понимаемВы - это кто? Да и чего уж там - сразу один жабаскрипт для всего прикладного.
Оказывается, для винды до сих пор нет драйвера F2FS. Было бы круто, если б кто-нибудь на расте драйвер запилил. С железом для разработки проблем не будет, так как флешки есть у всех. Линуксоиды тоже заинтересованы, ибо приходится давать флешки виндузятникам.
Растишки, а есть какие-нибудь best practices и советв, как перестать воевать с borrow checker'ом и начать жить? Очень часто приходится некоторые места у себя переписывать из-за ссылок и лайфтаймов. Большое всего бесит наверное про несколько мутабельных заимствований или про получение ссылки на элемент структуры и вызов с &mut self с этой ссылкой а качестве параметра .
>>1463989Либо смотри в сторону другой архитектуры, типа ECS, либо смотри в сторону более функционального подхода, либо юзай interior mutability, Rc, Cell, Arc, Mutex, вот это все.
>>1463989Не используй ссылки, чтобы связывать между собой объекты. Заимствование - это строго для передачи аргументов в функции и для структур, которые живут сугубо на стеке. Для всего остального используй индексы в вектор или Rc. В особых случаях, когда ну прямо совсем-совсем критичен перформанс (перформанс с графовыми структурами, хех, мда), указатели. >про получение ссылки на элемент структуры и вызов с &mut self с этой ссылкой а качестве параметра .Есть причина, почему это не одна функция? Вытаскивать наружу кишки, а запихивать их же обратно - это как-то не по людски.
>>1464071Вот со всеми этими боксами ещё больше геморроя. Матчить что-то в них , borrowck орет ещё больше. Хотя может опыта просто нет нормального, как писать все это дело. >>1465355> Есть причина, почему это не одна функция? Вытаскивать наружу кишки, а запихивать их же обратно - это как-то не по людски.А я и в одну функцию делал. Один хрен, в нее запихнешь, а в ней появляется еще одно мутабельное заимствование. Единственный воркэраунд нашел для этой штуки - это оборачивать такие переменные в RefCell и пропихивать его куда надо, но как-то больно уродливо получается. Ну да и что выше написал к нему же относится .
>>1465707Аноны, кто-нить пробовал скрещивать раст и NDK? У меня такой проблем:через MaybeUninit создаю пустую структурускармливаю NDK-шной функциипосле assume_init с простыми полями структуры всё збс - данные читаются и вполне валидны, но вот при обращении к ссылочным полям выкидывает сегфолт.То есть, то ли проблема при конвертации изначально сишного пойнтера в растовый, то ли при вызове что-то недоинициализировалось, то ли я заголовки криво сконвертил через bindgen, то ли ещё ебола какая.
>>1473957Оставь в структуре сишный указатель и определи функцию, которая кастит указатель к с ссылке через разыменование. Ты не вызываешь мутабельные операции, используя немутабельные ссылки?
>>1474056Попробовал, не помогло. Короч, было так: структура, а у ней внутри анонимный union с указателями. bindgen сделал внешний тип union и вставил поле с ним в структуру. В итоге помогло тупо засунуть указатели из этого union в исходную структуру.Вообще, чё-т дохуя накопилось уже правок в сгенеренном bindgen-ом заголовке, хоть в гит его добавляй
>>1456440 (OP)Поясните фастом без особых подробностей о языке по хардкору.Если заинтересует, хочу вкатиться. От С блевать уже тянет.Что на нем можно писать? Системное по? Мобилку? Гуи? Веб? Есть какие-то либы для облегчения жизни и менеджеры зависимостей?Что там с платформозависимостью? Есть какие-то фатальные недостатки или жуткие изъебы языка?Спасибо.Мимо perl, С программист
>>1474226>Что на нем можно писать? Системное по? Мобилку? Гуи? Веб? Системщину и микросервисы да. Остальное пока в зачаточном состоянии. Ты можешь, например, подключить к проекту на Кутях растовую статическую либу через FFI, но работа с гуём из самого Раста пока только через всратые биндинги. Пилят какие-то штуки для фронтенда на ВАСМ.>Есть какие-то либы для облегчения жизни и менеджеры зависимостей?Есть встроенный cargo, пишешь в конфиг название пакета, скачиваешь мегабайт исходников и всё работает.>Что там с платформозависимостью?Более менее всё, где есть ЛЛВМ, поддерживается, но есть платформы второго и третьего класса. А так, люди, вроде бы и ОСи пишут, и диодами мигают.>Есть какие-то фатальные недостатки или жуткие изъебы языка?Если не считать изъебов с борроу-чекером и мов-семантикой, язык на порядок проще плюсов, да и, в каких-то отношениях, чего-то типа СиСярпа, особенно если не нужно трогать Ансейф. Замыкание - это просто структ с одной функцией, Фьючур - это просто конечный автомат, и т.п.
Вот еще новичкам https://old.reddit.com/r/rust/comments/d28mt0/standard_async_tutorials_and_examples/Особенно коммент D1plo1d доставляет.
поглядите, аноны, что я сотворил:https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=cd58bb0b05ee422d7b4bc8618bceff75код выглядит валидно, конпеляется, а работает - пиздос.
>>1474562https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1feb6cb0b0217abb0c99bbeba42d55c5
>>1474562Где-то читал про контейнеры раста (не помню где), что в таких случаях (до сотни элементов) выгодней всего использовать вектор https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=fa287995b1bfdf41f29bcbcc90ed453bи HashSet если больше.
>>1474864Да, я про expect позже уже сам вспомнил. А тут что-то переклинило, помню, что вроде бы какой-то особый unwrap, а что конкретно - не помню - взял и наваял, а оно вон как.А ведь то, что я сочинил, было бы даже лучше, если бы было признано идиоматичным и работало нормально.
>>1475065https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=0119f580a10b1aff1f10bdcc46e2c8ef
Есть еще matchhttps://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f9103375a42eec79b0043584d35684b3
>>1475763Есть еще комбинаторыhttps://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=08f5f3c872bc29dad3dd758d4d9a3ad8
>>1475415Да, вариант с find + expect был бы самый оптимальный. Плохо то, что способов сделать одно и тоже, в итоге, овердохуя, и мой вариант зачем-то сконпелировался.Алсо, паника в моём варианте указывает на то, что любой вызов в unwrap_or будет выполнен, независимо от того, нужен тебе результат или нет. Даже так - можно просунуть вызов любой функции, оно также сконпеляется, и выполнит функцию.https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c55b015785a2b64b0d5c505bd6434ddfХотя если просунуть напрямую ту же строку, которую она возвращает, то результат будет другойhttps://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=79d0246d783c94b0237c8d483c0cc659Короче, я ни хуя не понимаю, если это не ошибка разрабов языка, то что. Багулю завести, что-ль..
>>1475842>результат будет другойбля, туплю, результат будет тот же. Но вот вызывать замыкание в примере выше вообще не нужно было.
>>1475843>Arguments passed to unwrap_or are eagerly evaluated; if you are passing the result of a function call, it is recommended to use unwrap_or_else, which is lazily evaluated.
>>1476123И вот так, шаг за шагом, наступая на грабли на каждой строчке, я таки напишу свой хэллоуворлд. Впрочем, я утрирую, не всё так плохо, конечно.
>>1476216Вообще если у тебя проблемы с понимаем почему это так работает, тебе бы лучше SICP почитать.unwrap_or это обычный метод, который на вход принимает значение. Поэтому параметр будет вычислен перед передачей. А раз у тебя там была паника, то она взорвет приложение.Код вида foo.bar(panic!("pizda")) не вызет ведь вопросов?
>>1456440 (OP)>3 webmА как так сделать?Хочу вкатиться в раст и зачекать язык в целом, искал идей для мини проекта. То, что на вебмке очень хочется повторить но с другим ресурсом ест-но.
>>1476216А ты свой код спиздил, или нашел этот метод документации? Потому что если ты читаешь описание до половины, у тебя в каком угодно языке будут проблемы, лол.
Аноны, как передавать растовые функции как сишные коллбэки? Если просто объявить функцию extern "C" fn blabla () {}и передать без задней мысли - сишный код это схавает? А то растовый-то конпеляется.
>>1482492Ты уверен, что у тебя нет проблем с версией либы? Там из новых версий убрали GlobalRef::new(), может ещё какая-то херня с этой функцией была в разных версиях, до того как убрали.Можно попробовать прописать полный путь: jni::objects::GlobalRef::newМаловероятно, но вдруг это GlobalRef::new из какой-то другой либы?А если нет, то пиздос, да.
>>1483634Да, я видел, что убрали, откатился на последнюю, для которой дока написана - а там это. Видимо, потому и убрали, что такая свистопляска. Ну да я пока кастанул типы через as , конпелируется, правда, я пока это даже не пробовал запускать на живом ведроиде - наверняка куча ошибок повылазит.Ты тоже жабу с растом скрещиваешь? И, если вдруг, тоже под ведроид?
>>1483794Лол, нет, просто стало интересно, почему такая хуета могла возникнуть, загуглил "GlobalRef::new rust", а мне выдало старую версию либы. Я посмотрел сорцы того, что мне выдало наhttps://docs.rs/jni/0.5.3/jni/objects/struct.GlobalRef.htmlТам вроде как не должно выпадать такой проблемы. Посмотрел ещё последнюю версию этой либы, но другие смотреть уже не полез, своих забот полно.
>>1456440 (OP)Привет, двач. Есть у кого на примете годный курс лекций по алгоритмам? Знаю, что библией алгоритмизации считается книга Кормэна(потом по нисходящей идут Дасгупта и Бхагарва, тоже знаю) и мне нравится её полнота, однако, формальный язык очень и очень отталкивает, не способствуя пониманию. Да и вообще, формат лекций мне как-то ближе, нежели просто чтение книги. В общем, какие требования? Полнота(речь не об N-полноте, лол) Кормэна в сочетании с интересным, не сухоформально рассказывающим преподом. А, да, и чтобы на русском(знаю, что охуел). Подскажите чего по сабжу?
Аноны, поясните, как вы живете с tokio, блятб. Я заебался вкуривать, как мне данные считывать циклически и передавать их на обработку связанной структуре.В asio я могу заюзать например async_read(...), пихнув в callback shared_ptr с контекстом и потом вызывать это чтение дальше до тех пор, пока не произойдет какой-нибудь пиздец. Посмотрел в tokio, ебать в рот, какой-то хуй обсасывает пример как клиентом подключиться - с фьючерсом, естественно, но там какое-то блокирующее дерьмо по итогу выходит в работа в полудуплексе. Есть нормальное чтиво для понимания как это дерьмо разгребать, а то меня по-маленьку этот ваш Rust начинает вымораживать со своими "выебонами".
Что конкретно не так?https://tokio.rs/docs/getting-started/hello-world/https://docs.rs/tokio/0.2.0-alpha.6/tokio/
>>1485988>Generic associated typeshttps://github.com/rust-lang/rust/issues/44265почитал RFC, но ни хуя не понял. В nightly уже есть, но с багами.
>>1486280Я не спец, но могу посоветовать https://github.com/tokio-rs/tokio#exampleесли тебе в этом примере ничего не понятно, значит ты какой-то тупой покури ещё мануалы/попиши хэллоуворлды.
Учусь в вузике, не могу решить что учить, раст или кресты. С одной стороны все говорят что раст много лучше, но с другой вакансий то нет.
>>1489468Двачую кресты. Сначала наступишь на все крестовые грабли, зато потом, перейдя на раст, не будешь ругаться на борроучекер.
>>1489468На каком курсе?Если на младших, то у тебя есть время, и лучше поебись с С. Полезнее будет.Если на старших и уже поджимает искать первую работу, не трать время, лучше C#/Java.К расту вернёшься, когда износишь пятый свитер и отрастить бороду.
>>1456440 (OP)Давно не интересовался этим перспективным языком. Скажите, нечитаемые неинтуитивные сообщения компилятора уже пофиксили?
>>1489859>язык виноват Это вопрос для долгой дискуссии. Однако, могу назвать сходу 3 возражения:1. Лучше учиться правильно управлять памятью на ошибках конпелятора, чем рантайма.2. Ты не всегда можешь знать наверняка, что с твоими данными сделает сторонняя либа. Каждый раз лазить в исходники? Ну нафик. А раст тебе сразу скажет, что сторонний крейт хочет то и это, поэтому обеспечь, пжалста, вот это.3. Я не зумер и всю жизнь избегал сей с плюсами ровно потому, что мне бы програмить, а не о подводных камнях думать. Раст тут думает за меня
>>1489875>Лучше учиться правильно управлять памятью на ошибках конпелятора, чем рантаймаЗадумка годная и намерения благие, а как на деле? Вот например есть Standard ML с математически доказанной безопасностью. Почему мне стоит выбрать Rust а не его?
>>1490326Это как гвидон vs руби. Как бы ни был второй прогрессивнее, но первый выбирают из-за батареек. Так и с растом - он уже взлетел, есть куча батареек и мануалов, отзывчивое коммьюнити, это вот всё. Даже если появится что-то в теории лучше, на практике все, кому нужна безопасная работа с памятью без сборки мусора - уже на расте.
>>1489468Не стоит вопрос что учить. Язык учится в процессе разработки программы.Стоит вопрос на чём эффективнее писать софт. Неверно принятое решение может потом дорого стоить.Т.е. вопрос сводится к: в каких случаях в 2019-2020 лучше взять Rust, чем C++.При этом для простоты можно допустить, что пишем новый код с нуля и можем использовать любые последние версии инструментов.Здесь сразу возникает куча дополнительных критериев: сколько человек будет в команде, на какой срок рассчитан проект, предметная область и т.д.Допустим, у нас какая-нибудь числодробилка, т.е. нужна максимальная производительность на конкретном железе. Команда 5-10 человек, срок разработки 2-5 лет.Попытаемся сравнить.C+++ куча готовых библиотек отличного качества− в языке куча подводных камней, всегда есть риск облажаться, особенно, если разработчик малоопытный+ язык популярный, у заказчиков не возникнет вопросов, если вдруг кто захочет в код полезтьRust− библиотек гораздо меньше, многие сомнительного качества; да, можно подрубать по FFI, но это лишняя работа и трата времени (хотя возможно и не особо серьёзная в контексте проекта на несколько лет)+ выстрелить себе в ногу гораздо сложнее− выбор маргинального языка придётся обосновыватьПо этим пунктам, что я привёл, плюсы опережают.Первый и второй примерно уравновешивают друг друга, на мой взгляд, но третий опять склоняет чаши весов в пользу плюсов.Язык мне нравится, он уже не настолько маргинальный, как звезда хайпа прошлых лет - Haskell, выглядит практичным, продуманным и удобным.На нём уже пишут какой-то софт, та же мозилла (хотя и про хаскель можно то же самое сказать, и на нём писали немало).Но всё равно не хватает по-моему до того, чтобы выбрать раст для решения практической задачи.Здесь ему немного не повезло - плюсы начали активно развиваться и реализовали многие вкусные фичи. Не было бы C++11 и последующих стандартов, тогда бы Rust конечно выглядел шикарно, а так единственное серьёзное преимущество это что язык изначально сдизайнен грамотно.
>>1490496>та же мозиллаА ещё гугл, Cloudflare и пейсбук - так что, вот прямо в данный момент, не маргинальный. Алсо, в твоём исходном условии>какая-нибудь числодробилкауже подразумевает некую изолированность от внешних библиотек, поэтому этот минус тоже в минус.Что касается хачкеля, то ему решительно не хватило плюсов (пгостите за каламбур) - одного "сконпелировалось - значит будет работать правильно" оказалось недостаточно, чтобы переманить на него с жабы и питона - т.к. скорость разработки на хачкеле куда ниже. У раста же с этим проблем нет - скорость написания на нём примерно та же.
>>1490605>А ещё гугл, Cloudflare и пейсбукПробуют на единичных проектах, не более. Зачастую это просто инициатива конкретной команды/разработчика. Если полазить по гитхаб-организациям этих компаний, там и более редкие языки можно найти. Например, OCaml.Активнее всего продвигает мозилла, оно и понятно, остальные пока не так активны. Просто осторожный интерес.>уже подразумевает некую изолированность от внешних библиотекПо большей части да, но мало кто вообще никакой внешний код не импортирует. Обычно будет хотя бы несколько библиотек. Или по крайней мере скопипащенные в свой проект исходники на си/плюсах.
>>1491400А почему нет? У нас есть SO, растофорум на английском и куча книжек по расту. Зачем нам ещё на дваче тредак?
>>1491814Более того на реддите постоянно висит реклама от parity.io про вакансии на расте. В общем, было бы желание.
>>1491814Мне бы вот в расеюшке. Переезжать не хочу, семья тут. А удаленка - это то ещё приключение. Зато на гошке вон даже в мухосранях вакансии есть. И мозгами шевелить не нужно , когда на ней что-то пишешь.
>>1490643Ой нахер. Я после своего опыта на sdl2, попытался переписать свою одну игрулю на растишку и только поел говна. Все слишком сложно, передавать туда сюда игровые объекты внезапно стало трудно. Я вроде с растом где-то уже год вожусь, а когда начинаются проблемы с борровком и лайфтаймами, то все, ласты клею. В плюсах все те же махинации обстоят гораздо проще. Так что лучше так же , как и раньше на них писать и не страдать ерундой, выбирая БизАпАснаТь.
>>1493370Превозмогать. Можно и без Rc, и без RefCell, на одних лайфтаймах выехать - если грамотно структуру приложения и данных выстроить. А если ты в тупую сишный код переписываешь, ну дак так оно и будет.
>>1493554такую хуйню тебе писал когда сходил с ума изза пездеца по жизне спасибо за все люблю тебя респект до гроба
>>1493554> specsЗнаю про эту штуку. Но я пытался свои плюсовые велосипеды переписать. Там у меня и компоненты сгруппированы в памяти. И индексы для них хорошие. Хотел чисто поглядеть, насколько похожа будет производительность. У спекса просто интересно бы ещё пробенчмаркать что-нибудь более-менее тяжёлое. Хотя оно наверное и не надо. Век уже не тот, чтобы игры оптимизировать
Анука анонцы, скажите, а что на нём пишите лично вы или собираетесь. Хоть один? Напоминает хаскелиную историю: всё можно, но на деле никто не будет
>>1494915Собираюсь контрибьютить в графический менеджер redox и потом портануть его на линупс, потому что даже в модном mutter-wayland память корраптится, аноны радуются артефактам на экране, баги не фиксятся годами, а самому пофиксить нереально из-за конченной культуры разработки free desktop
>>1494915> всё можно, но на деле никто не будет Хз, уже второе место работы подряд, где пишу на расте. Первое - блокчейны, сейчас - решение, связанное с ИБ.
>>1495025Ты про qt/gtk? Они умеют в wayland, так что достаточно его поддержать в orbital. А может уже кто-то чисто под wayland написал DM и композитор на расте. Тогда еще проще
>>1495397По "rust wayland" гуглится несколько проектов, насчёт WM не уверен, что есть что-то юзабельное. Как по мне, слишком масштабная задача, слишком много там внутри подводных камней, связанных с драйверами, тулкитами и прочим. Такое делать нужно сразу большой командой, имея кучу бабла, менеджмент, роадмапы и пиар.Иначе будет очередной проект " Latest commit ab123cd 2 years ago".Если бы я за такое брался, я бы делал что-то вроде юнити-7 поверх вяленого - так больше шансов получить пользовательскую базу. Но это такое моё имхо.
>>1456440 (OP)Сап. Как создать указатель на:SystemTime::now().duration_since(UNIX_EPOCH).ok().expect(...)Тип справедливо выводится, какDuration, а не fn() -> DurationМожно сделать указатель на:SystemTime::now().duration_sinceНо тогда все ровно каждый раз придётся обрабатывать Result. Писать врапер?
>>1495415Мне нравится gnome 3 wayland в целом - шустро, красиво, относительно стабильно, так что цель - более стабильный mutter, можно даже кусочек от него. Но вообще ты прав, задача навскидку довольно большая. В любом случае как минимум получу реальный опыт rust-а
>>1495426Тебе замыкание нужно, что ли? let func = || SystemTime::...;https://doc.rust-lang.org/rust-by-example/fn/closures.html
>>1500526Высокохудожественный говно-анализ посредтвенного перевода. Детишки играют в испорченный телефон, ок.
>>1500526Насколько ты готов слушать человека, который считает, что в Расте можно шарить между потоками только глобальные переменные?
>>1500526"Если вас по телефонуОбозвали дуракомИ не стали ждать ответа,Бросив трубку на рычаг,Наберите быстро номерИз любых случайных цифрИ тому, кто снимет трубку,Сообщите - сам дурак."Долбоёбы были, есть и будут, тут ничего не поделаешь. Но нехуй тут всем доказывать, что ты тоже долбоёб. Окей, раст бесполезен, если ты уже пять десять пятнадцать лет хуяришь код на си или крестах. И что дальше? Проблему обезьян, которые хотят в скорость, но не могут в с(++), ака "я уже не чувствую ногу, дайте мне то, чем я не смогу в неё выстрелить", раст решил, а больше и не надо. Да, я ленивая мразь, которая хочет решать свои йоба-задачки без ебли и кучи UB, которые желательно все помнить. Но это мои йоба-задачки, хули ты тут вылез со своей пропагандой антипропаганды?
>>1501746>пропагандой антипропаганды?эм, скорее антипропагандой пропаганды. Да и, кстати, в примере, который они обсасывают, ясно же сказано, что чувак, типа, вообще не программист. Берёт сишечку и наступает на все возможные грабли, но в рантайме. А потом берёт раст и снова наступает, но уже при сборке.
>>1500526Пиздец. Узколобый подумал, что обсирают его любимую сишечку, но основная мысль статьи на хабре была другая: хруст не даёт сделать хуйню. Дебил сагрился на побочку
Ньюфаг в треде. Можно ли писать в подпроцесс и читать из него в цикле? Без использования сторонних крейтов.
>>1503491https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b1f2c86b48ca7136891904d28097bb00
Все смеются над вами, что у вас работы нет.Вы похожи на христиан во времена римской империи, когда они были мелкой сектой.
Я хз как вы работу ищете, меня сраного дотнетчика-бекендера с опытом хуйлоада/дистрибутеда с облаками и видеонаблюдением за последние 2.5 года около 10 раз звали на вакухи писать сраные сетевые/стриминговые/игровые сервисы, где раст или желателен, или даже обязателен . Как раз 2.5 года назад я в резюмешке на хх/линкдине указал раст на микроконтроллерах в качестве хобби, в акке на гитхабе вообще пусто. Полгода назад сменил работу на финтехо-тимлида, и зовут уже раз в месяц в сраные криптобиржи и блокчейн-стартапы, при этом опыта на расте у меня не прибавилось. Прост для ждунов/милдов на расте работы рили нет и хорошо, а у синьоров/лидов опыт нерелевантный описан. Посмотрите на растовые вакухи, в тч из других стран (в том же this week in rust), поймите, что серьезные дяди на нем делают, и расставьте соответственно акценты в своей резюмехе. Понятно что фронтендера с 10лет опыта на джс не будут звать делать бэк на расте.И да, не ищите растовакухи на хх. Линк и ангеллист - от туда меня в основном хантили, на индид говорят еще часто появляются, но я там не зареган. А лучше вообще ходить на митапчики типа @ruRust_msk , хоть узнаете, как докладчики работу нашли. Не забудьте напечатать себе визиток с крабиком лол
>>1504086Кстати, я заметил что в раст пытаются перекатиться очень много дотнетчиков. С чем это может быть связано? Алсо, сколько у тебя опыта работы?
>>1504213> Кстати, я заметил что в раст пытаются перекатиться очень много дотнетчиков. С чем это может быть связано?Хз, у меня другая статистика по совсем нерепрезентативной выборке (из бывших коллег и знакомых):C++ gamedev -> nodejs backend -> rust backend,Python QA automator -> python backend -> rust backend,C embedded -> c + c++ + asm в реверсинге -> то же + rust в каком-то инфобезеЕсть еще чувак, которого я года 3 назад из трейни довёл до стронгмидла-почтисеньора в aspnet fullstack, он удаленно поработал в пяти сраных крипто-блокчейно стартапах на rust+scala/nodejs/go/etc, и везде дольше полугода не задерживался.> Алсо, сколько у тебя опыта работы?12 лет в IT, из них 9 в разработке, из них 2 тимлидства.>>1504217> Просто я сам дотнетчик, пилю всякое веб-говно, и хочу перекатитьсяПопробуй сначала из крудо-формошлепства перекатиться в чистый бекенд с кафками-куберами-облаками-grpc'ми-числодробилками-хуйлоадом, или с текущим стеком вкатись в предметку, которую часто на расте пилят, типа сраного криптоблокчейна - будет гораздо легче найти работку на расте.
Ребят, вопрос к знатокам. У меня возникла задача -- разработать виртуальную машину для основанных на System F и ее вариациях ЯП.Для довольно узкой области, поэтому на всеобщность и очередного убийцу жабки/erlang/чего там еще не претендую. Раст мне понравился, потому что на нем можно без мозгоебли уровня крестов сделать то, что будет работать и работать будет быстро. К сожалению, скорее всего, буду реализовывать на си, потому что мне нужно часто вручную управлять памятью для реализации сборщика мусора да и вообще почти всего, что только возможно. Собственно, вопрос: целесообразно ли разрабатывать подобную систему на расте, если предполагается хитровыебанный алгоритм сборки мусора и если да, то как идиоматичнее обходиться с raw memory?
>>1505563>Раст мне понравился, потому что на нем можно без мозгоебли уровня крестов сделать то, что будет работать и работать будет быстро.В низкоуровневых штуках которые ты собираешься писать он выебет тебе мозги ещё сильнее, лол. Хотя бы для рантайма, просто возьми C и не выёбывайся — точно напишешь быстрее.
Господа, подскажите, пожалуйста, в какую сторону мне копать, чтобы решить проблему.Где-то год назад видел на сях либу, в которой реализовывались потоки уровня пользователя, причем преемптивные. Т.е., по истечении некоторого кванта времени в процесс посылался сигнал и происходило переключение исполняемой функции, с сохранением состояний регистров текущей функции в специально отведенный стек.Вопрос следующий: как реализовать подобное на расте? Точнее, что можно почитать, чтобы стало понятно, как это реализовать, т.к. просто взять готовое слишком скучно, хочется понять, как оно сделано.
>>1505989Ну вот я почитал книжку, которую мне вчера скинули, и понял, что у меня просто будет один огромный кусок unsafe-кода, так что проще на сях написать всю работу с потоками, исполнение байт-кода, jit-компиляцию, вот это все. И тогда закономерный вопрос -- а стоит ли тащить вторую технологию в стек?
>>1506006Насколько я тебя понял, ты описал стейтфул корутины.Собственно, гуглится на раз два https://github.com/Xudong-Huang/may , и реализация подсматривается там же. Ну либо в той либе на ц, если интересно именно изобрести велосипед на расте.>>1506013>проще на сях написать всю работу с потокамиЕсли тебе нужно было бы привязывать к бинарнику рантайм, то да. Но если тебе таки нужно сделать вм — эээ, нет.>исполнение байт-кодаhttps://github.com/RustPython/RustPython9 ансейфов на целый интерпритатор питона.>jit-компиляциюhttps://github.com/nbp/holyjit2 ансейфа.Просто именно GC, где вся деятельность — это ходить по стеку и искать ссылки — будет одним большим ансейфом, да.Есть ли смысл брать раст — если хочешь сделать на скорость, то нет. Если ты собираешься делать какую-то низкоуровенную хуйню, у которой повышенные требования к безопасности (например, если она торчит в сеть, как браузер) — то да.
>>1506118Насколько я понял, то, что ты скинул (may) -- это все-таки инструмент для кооперативной, не преемптивной многозадачности.Мне же интересно прерывать исполнение процесса извне, а не изнутри него.
>>1507235Я занимаюсь арбузным бизнесом. У меня вызывает нейтральную реакцию rust и все, что с ним связано.
>>1507675Бля. Знаешь, что. Пруфани арбузом и глубокими познаниями жабы. Сам я тоже сорт-оф жабист, но без погонов.
>>1507705> пруфани арбузамиК счастью я еще не дошел до того, что выращиваю арбузы дома. Чем тебе пруфануть из хаты-то? Док-ты слать не хочу, ибо диванон.> глубокими познаниями жабыНу, давай, нападай. Я периодически пилю свои проекты, так что не забыл почти.
>>1507711Да что я тебе накидаю, всё же гуглится. Вот как у твоей нашей жавы с потокобезопасностью дела, какие преимущества перед плюсами? Вот расшарил ты, такой, List в кучу тредов и радуешься.
>>1507733> pic relatedБыло время и я думал, что арбузы можно на дому хорошо растить.> потокобезопасностьПисать потокобезопасные приложения на джаве, конечно, можно.Неблокирующих алгоритмов предостаточно (List, Stack и бол-во java.util.concurrent) и вполне можно потому и радоваться.Но на других языках, бесспорно, это часто проще.> преимущества перед плюсамиИх тебе любой школьник назовет. Ну лан.Я имел опыт работы с плюсами еще с времен Borland C++ Compiler, поэтому отвечу по житейски, что в джаве программировать в разы безопаснее и реже приходиться ебаться с дебаггером и смотреть, что за хуйня у тебя вылезла.На джаве кодить проще, так как ты не задумываешь о выделении памяти, не думаешь о том, смаллочить один огромный кусок или по кускам, как собака, таскать. Ты не думаешь о том, когда тебе надо освободить кусок памяти.На джаве кодить быстрее. У тебя есть вотакенная стандартная библиотека на все случаи жизни и ты не будешь делать очередную реализацию картошки с торчащими палочками.На джаве МУЛЬТИПЛАТФОРМЕННЕЙ. На джаве больше работы и меньше требований.На джаве, иногда, бывает быстрее. Правда, это скорее из области фантастики, но JVM способна байт-код переводить наиболее оптимально в код платформы, откуда она вызвалась, таким образом, беря бремя платформенных оптимизазаций на себя.Но сказать, что лучше, что хуже объективно, конечно, нельзя. Это разные инструменты под разные задачи, пусть они и иногда и пересекаются в рабочем поле.Ебал в рот кресты и джаву, люблю си и ассемблер и мне похуй.
>>1507751>реже приходиться ебаться с дебаггеромДа, да. Смотришь, а там concurrent modification exception прилетел, конкретно с какой строки и всё видать - красота. Но это в рантайме - может вылезти при отладке, а может и только в продакшене, как повезёт. Сама по себе жаба по-умолчанию позволяет наступать почти на все те же грабли, что и плюсы, только они у неё помягше. Ну, если ты сеньор, то ты, конечно, уже про все грабли знаешь и не наступишь.А вот раст чем хорош - что он ещё на этапе компиляции отсекает все твои попытки пройтись по граблям. Понимаешь? Не надо быть сеньором, чтобы писать потокобезопасно - сам компилятор не даст тебе писать небезопасно. Это сильно упрощает и удешевляет разработку, снимая кучу головной боли.Кроме этого, раст ещё и сахарный, почти как питон.Как докатился до арбузов-то? Дядя - арбузный король оставил наследство?
>>1507796>Как докатился до арбузов-то?Отсидел за наёмничество. Скоро думаю заводить трактор, как срок давности пройдет. А вообще, на деле, арбузы не такая уж и плохая альтернатива программированию. Получаю хорошие деньги. В арбузах разбираться стал...>А вот раст чем хорош - что он ещё на этапе компиляции отсекает все твои попытки пройтись по граблям.Звучит прекрасно, но пройдет еще года два, думаю, пока программисты смогут это донести до заказчиков. Те, не смотря даже на примеры в цвете, как их продукт хуячиться в проде, не способны сделать вывод о необходимости завозить педеRUSTов. > СахарныйВот, вот это вот хорошо. А то, помню, golang смотрел...
>>1507807>заказчиковКрипту на нём уже пишут, так как безопасность там в приоритете. Там, глядишь, практика использования поднакопится, до остальных, более консервативных, сфер дойдёт.>>1507822>Java>Палестина>АрбузыЦАХАЛ?
>>1507832Так, значит, ты - торговец арбузами, в прошлом ява-сеньор, отсидевший за наёмничество как палестинский боевик..?
>>1507836Не говори, а мы тут штаны просиживаем. Хотя, по арбузам можно было бы догадаться, что не ЦАХАЛ. Но я как-то решил, что было бы логично сперва работать жава-сеньором в кибуце, а потом пойти, соответственно, в ЦАХАЛ.
>>1507842> по арбузамА что тебе арбузы обо мне говорят? Ну, решил я ими заняться и что? Почему все доебываются до блядских арбузов? Если бы я скажу, то все думаю, что я серьезный перец, а как арбузы - сразу какое-то предвзятое отношение. Несправедливо.> ЦАХАЛЕсли бы там был, то не пришлось бы сидеть.
>>1507849Не знаю, как у вас, а у нас на рынке - что ни торговец арбузами, то с большой вероятностью, чисто внешне мусульманин.
>>1507849Сколько и где сидел? Тюрьмы нормальные? За кого воевал (и зачем - ты же программист епта, можешь переехать в любую страну)? Не очень разбираюсь, че там у вас.
>>1507857> А у нас на рынке - что ни торговец арбузамиУ меня бизнес крутится в несколько другой плоскости. Я отвечаю, за организацию цепочки доставки с югов в регионы России, от Петербурга до Новосибирска. Я не занимаюсь курированием выращивания бахчевых культур.А насчет этих уличных торговцев, могу сказать, что иногда думал заняться и этим, потому что часто они, несмотря на свой бомжеватый вид, гребут нормальные деньги. Я изучал этот вопрос и не мог понять, какого хуя они одеваются как бомжи, если получают такой титанический (для своей ниши) оборот. Вопрос, кстати, открытый.
https://www.openbusiness.ru/html/dop/arbuz.htm>Арбузный бизнес, как и всякий плодово-овощной, в России имеет ярко выраженную сезонную окраску. Зато его рентабельность может достигать 60-100%. Главное - суметь быстро организовать цепочку доставки арбузов с юга России в Петербург.охх, не знаю, может и меня заебёт однажды программировать и подамся организовывать цепочки поставок голубоглазых сибирских шлюх в Китай, тут близко
>>1507866Потому что оборот != прибыль.Это как в расте: язык есть, фичи есть, потокобезопасность есть — работы нет.
>>1507864>Сколько и где сидел? Тюрьмы нормальные?Тюрьмы - пиздец, в колонии было нормально. Так как были некоторые connections в ФСИН.Сидел я недалеко от родной республики. Говорить где, точно не буду, сами уж понимаете. За меня смогли договориться с нужными людьми и я сидел в хороших условиях, имел доступ в интернет, получал нормальную пищу и не было в камере никаких урков. Сейчас, такое не прокатит уже (вне Кавказа точно), так как в 18 году один авторитет пропалился СМИ о том, что он на зоне икру с шашлыком хавает и СК да ФСИН все ужесточили да сжали яйки всем, кто такое практиковал. Поэтому грешно мне жаловаться. Начал даже очень много читать на зоне, зона ушла - привычка осталась. Стал практиковать медитации отчего жить стало проще и чище.Все сейчас идет на исправление. Через год планирую, вот, в Германию свалить.> За кого воевалОдно из крыльев ФАТХ за освобождение палестины.> ЗачемНе понимал, что бороться с Израилем, пока штаты стоят за ним бесполезно.
>>1507874>https://www.openbusiness.ruСайт очень годный и в одно время очень помог мне. >голубоглазых сибирских шлюх в Китай, тут близкоОни сами находят свой путь. Время сутенеров медленно уходит вникуда и романтика нелегальных борделей тоже. >>1507878Да в том то и дело, что там по подсчетам и прибыль нихуйская была. Или они за крышу много отдавали, или они являются тайными воротилами теневой экономики. Третьего не вижу.
>>1507874> подамся организовывать цепочки поставокЕсли интересно, то в свое время очень помогла эта книгаhttps://www.alpinabook.ru/catalog/book-5557/
>>1507878>язык есть, фичи есть, потокобезопасность есть — работы нет.Вангую, что через несколько лет работы будет много, если разработчики языка не уйдут в хаскельманду.
>>1507880Если точка не согласована, могут снести. А чтобы не снесли, доставай монетку. Продавцу зарплату плати, если сам не продавец (а если сам, то умей общаться, торговаться и целый день каждый день стоять или сидеть на жаре), за бензин плати, грузчикам плати, налоги плати. Где тут прибыль-то? Да и зачем дорого одеваться, если потом всё равно всё расхуячишь соком, когда арбуз резать будешь?
>>1507886>Да и зачем дорого одеватьсяЯ скорее про то, что они спят вместе с другими приезжими в бомжатниках.А так ты верно все расписал про их издержки.
Только вышел из треда, прихожу, а тут уже какие-то арбузные боевики.Рассказывайте, кто что пилит на расте?
>>1507879Хуя себе история. Ты верующий, я правильно понял? Никогда еще не встречал верующих программистов. Ты исследовал коран? Видишь ли ты противоречия в нем? Как ты относишься к наличию разночтений у суннитов/шиитов и других направлений? Как ты относишься к тому, что все религии (и течения ислама) считают свое учение правильным, а все остальные - не совсем?Тебе легко было решиться пойти воевать (с высоким шансом умереть), когда ты такой себе сеньер 300к/нс? На каком языке вы там говорили в Палестине? Какими были ребята, которые воевали с тобой, какое у них образование? Они воюют чисто за территории Палестины или там замешана религия? У тебя была военная подготовка или учили там на месте? Ты сидишь в /wm/?Сейчас тебя беспокоит, что Израиль поступает несправедливо по отношению к Палестине? Как ты относишься к тому, что за 3000 лет территория современной Палестины захватывалась самыми разными народами: евреями, римлянами, арабами, османами, персами, греками, англичанами, немцами, французами и т.д. Так получилось, что последними были амеры с евреями. Почему важно, кто там сейчас управляет, ведь если пытаться опираться на историю, а не на текущее население Палестины, то и греки вполне могут претендовать на эти территории? Или причина конфликта в том, что евреи именно в наше время сильно прессуют арабское население в Палестине?Есть ли у тебя знакомые евреи, которые являются хорошими людьми?
>>1507994дебик, тебе бы историю подучить. До евреев на этой земле были только Кнааны, потом были евреи, коих силой изгнали оттуда и они 2000 лет шароебились по планете Земля и их прессовали по кд все кому не лень. Иерусалим в Торе упоминается свыше 150 раз, в Коране - ни разу (да-да, пошел нахуй, у меня знакомый аспирант востоковед и знает всю эту чепуху, лично я ссал на все эти религии плотной струей урины). Никакой палестины нет и не было никогда за всю историю всех народов, это все равно, блять, что утверждать, что ДНР - это полноценное государство и всегда существовало, лол. У нее никогда не было государства, она была подмандатная после первой мировой, сама земля в то время принадлежала вообще британцам. А палестинцам (на верный лад, филистимлянам) дали такую кликуху римляне, которые тоже были мимозавоевателями. Образование государства Израиль в 1948 году - не более, чем возвращение евреев на родину после изгнания длиною в 2000 лет. Факт - за 70 лет евреи построили одно из самых развитых государств в мире (технологии, медицина, экономика на мировом уровне), а когда обоссаный конч Ариэль Шарон отдал Газу этим даунам, она из цветущих садов превратилась в чистилище ада буквально сразу. Про исковерканные толкования Корана начала 20ого века, где ВНЕЗАПНО появляется инфа, что Иерусалим вовсе не принадлежит евреям, это вообще рофл. В общем, собаки лают, караван идет. мимонежид, бтв
>>1508039>Факт - за 70 лет евреи построили одно из самых развитых государств в миреА разве не американцы это сделали?
>>1508039Я вообще не утверждал ничего, о чем ты бугуртишь. Палестина - это просто одно из названий той территории, из которого сразу понятно где это и что это. Не явлюяюсь фанатом евреев или арабов, я к этому конфликту никаким боком не отношусь, просто любопытно.Почему ты так сгорел?
>>1508042А разве американцы? По-твоему, союз == полное гособеспечение от А до Я? Тащемта, нет.>>1508050Я тоже не имею к этому отношения, но арабы в современной истории причинили огромное количество страданий людям разных народов. Чем занимались евреи? Строили свою страну, разрабатывали новые технологии, продвигали науку вперед. Чем занимались муслимы? Аллахакбарились в метро, на улицах в толпах ни в чем неповинных людей, резали людей на улицах, насиловали женщин по всей Европе. Абсолютное большинство террористических организаций в мире состоит чуть менее, чем полностью из муслимов. Обобщать не хочется, ибо это очевидно, что не АБСОЛЮТНО каждый муслим в мире == террорист, но статистика энивей играет не в их пользу. Евреи - созидатели, муслимы - разрушители. Я уважаю евреев за то, что они, несмотря на гонения длиною в ТЫСЯЧИ лет, не исчезли с лица Земли, как народ, а восстали как Феникс из пепла, да еще и построили свое государство достойным образом. И я презираю большинство муслимов за то, что в современной истории они сеют смерть и ненависть. Это факт, с которым сложно спорить.
>>1507994>Хуя себе история. Ты верующий, я правильно понял?Сложно ответить. >Никогда еще не встречал верующих программистов.Лично я заметил, что многие ударяются в буддизм (не совсем религия, но религозно-философское).>Ты исследовал коран?Да, я из рода хафизов, поэтому меня с детства думали сделать муллой. Я с ранних лет читаю, пишу по-арабски, поэтому это для меня не проблема.> Как ты относишься к тому, что все религии (и течения ислама) считают свое учение правильным, а все остальные - не совсем?Ислам считает все авраамические религии правильными. Все христиане и иудеи - ахль аль-Китаб, то есть люди писания, которых нельзя оскорблять, посягать на их имущество. Они, как мусульмане, попадут в рай, только будут подвержены большим испытаниям, согласно Корану и Хадисам.>Тебе легко было решиться пойти воевать (с высоким шансом умереть)Это решение было результат запущенного уныния, которое овладело мною. В то время я очень больно реагировал на любую несправедливость. Сейчас же я понял, что ей полна вся земля, и лучше изменить свое отношение ко всему, чем весь мир.>На каком языке вы там говорили в Палестине?Ебанутый вид арабского.>Какими были ребята, которые воевали с тобой, какое у них образование?Это простые ребята. Многие из них потеряли братьев, сестер, отцов, матерей и друзей от руки Израиля. Среди них было несколько людей с высшим, но бол-во - без него.>Они воюют чисто за территории Палестины или там замешана религия?Скорее смесь всего. Когда на твоей земле враг, который не дает тебе свободно молиться на твоих святынях, который загоняет тебя, аки скот, в резервации, который запрещает тебе даже вести свободно хозяйство на своей земле, то вопросов у многих и не было.>У тебя была военная подготовка или учили там на месте?Учили на месте. Военная подготовка до этого была. >Сейчас тебя беспокоит, что Израиль поступает несправедливо по отношению к Палестине?Сейчас уже нет. Многое в руках самих мусульман. Если бы все мусульманские страны пламенно желали залететь (и при этом действовали грамотно, а не на горячую голову) с моджахедами в Эль-Акса, то это бы уже произошло.>Или причина конфликта в том, что евреи именно в наше время сильно прессуют арабское население в Палестине?Именно. Это самый настоящий апартеид. Но миру - похуй. Пусть щемат палестинцев, пусть щемат уйгуров. Все будут молчать пока в том есть выгода.>Есть ли у тебя знакомые евреи, которые являются хорошими людьми?Среди евреев много хороших людей. >в Коране - ни разуДа. Он упоминается в Хадисах.>Образование государства Израиль в 1948 году - не более, чем возвращение евреев на родину после изгнания длиною в 2000 лет.Этот тезис смешной. Может теперь ассирийцам ближневосточным всю Месопотамию подмять? >Факт - за 70 лет евреи построили одно из самых развитых государств в миреС них надо брать пример.>она из цветущих садов превратилась в чистилище ада буквально сразу.Как ты эти чистилища приберешь, если тебе Израильское Goverment почти не дает свободно вести предпринимательскую деятьельность под угрозой смерти?>А разве не американцы это сделали?Скорее немцы. Иронично.>Почему ты так сгорел?Потому что этот анон не держит себя в руках.>но арабы в современной истории причинили огромное количество страданий людям разных народовЯ соглашусь. Им стоит вспомнить, то что во времена халифата все было наоборот.>И я презираю большинство муслимов за то, что в современной истории они сеют смерть и ненависть.Я не понимаю, зачем мусульмани идут на это, если в Коране чётко написано то, что их действия, терроризм и прочее - ебанный стыд и грех.
>>1508101У меня в голове пока что плотно сидят 2 тезиса (я считаю это фактами)1. Израиль будет сговорчивее, если в Палестине ко власти придёт партия, не ставящая своей целью уничтожение Израиля (сейчас там Хамас, он ставит, ФАТХ был миролюбивее - и с ним почти договорились)2. Арабы (Саудовские и прочие) заинтересованы в том, чтобы Палестина была вечной кровоточащей раной - им это нужно для мобилизации собственного населения, для поддержания образа врага. Они то и поспособствовали смене ФАТХ на Хамас, так как мир им не выгоден.Что касается помощи от США и проч: евреи, пусть на помощь США, пусть, организовали у себя государство первого мира с IT, медициной, фармакологией, кибуцами, космической программой и прочим. То есть, не сидят, сложа руки. Арабы, сидя на нефти, имея с неё гораздо больше, чем Израиль от США, только и делают, что пользуют Наташек и спонсируют "братьев" (в том числе некоторых жава-сеньоров) по всему миру. Рашка в этом плане не лучше, но это другой разговор.Я про то, что если смыть Израиль в океан, то арабы не построят там ничего путного взамен, как не построили они в других странах (есть у них Дубай, но там ни черта не производят, это чисто мировой офис).
>>1508152С тезисами я согласен. Евреи и арабы должны как-то научиться жить вместе (звучит смешно, но им придется). Только произойдет это даже позже чем раст станет мейнстримом.
Анон, нид хелпhttps://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2ae3105a8629b440e1fd8cbe4de91fb5что хочу: хочу 2 структуры чтобы одна (child) был вложена в другую (parent) и могла звать функции родителя. Можно такое провернуть без лишних изъёбов, на одном только Weak? Пробую, а всё никак: то, видите ли, parent owned, то ссылка lives not enough.
>>1509001Создай парента через Rc<RefCell<>>, у Rc создай слабую ссылку.Какую задачу ты решаешь? Скорее всего тебе такая ересь не нужна.
>>1507923>Рассказывайте, кто что пилит на расте? Движок для создания интерактивных карт для отображения истории Палестины.
>>1509152Я считаю, что ты ведешь себя неподобающе и нарушаешь дискуссию, которую ведут тут добропорядочные аноны. Своими действиями ты позоришь себя и все, что ты с собой олицетворяешь. Я бы задумался и прекратил вести себя столь глупо и неуместно, дабы не пятнать своё достоинтсво подобными выходками.
>>1509158>с собой олицетворяешь>достоинтсво>>1509170Просто трейты — это раст вей, ООП через ансейф — не раст вей. В сущности, какая тебе разница, выносить функции в трейт или в методы парента? Если там серьёзная разница в коде между методами парента и чайлда, то имплементишь отдельно. А если маленькая разница, то в функцию можно передать кложуру.
>>1509001https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=d1ef955bed15c42709ed95227940f74c> Какую задачу ты решаешь? Скорее всего тебе такая ересь не нужна.Анон прав.
>>1509451Как-то вот так.https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=336fc87928942a4e95c3fe05b692f2ae
Накопил денег, уволился с галеры, хочу сделать себе Diablo 2, как OpenXRay или OpenMorrowind, только на русте. Подскажите в какую сторону копать, а то этот гейдев какой-то сложный сильно.
Ананасы, почему ржавый не стреляет. Он вроде как замена си и крестов, а на должности в область системного программирования энивей в 99% случаев требуют знания си или плюсов, но никак не растаВатафак?
>>1511921Наверное потому что если у тебя уже написан софт на си и ты открываешь вакансию, ты будешь искать того, кто будет писать на си?Новые проекты и кампании довольно часто используют раст. Посмотри на те же крипту.Но вообще, раст не только и не столько про системное программирование, сколько про безопасную и быструю альтернативу без гц.
>>1511921Потому что для ядра он всё ещё жирный, а для плюсов слишком сложный как второй язык. А для простых утилит го проще и либы у него все есть. Вот где у раста что-то подобное go x/crypto/ssh?
>>1511952Тебя не смущает что "простые утилиты" по факту пишутся либо на расте либо сразу на ноде, а не на го? ripgrep один чего стоит.
>>1511940Ну я математику пишу например. Шаблоны крестовые очень заходят, а вот борроу чекер не пришей пизде рукав
>>1511953Не смущает, ибо у меня обратный опыт. Щито поделать.jpegВзять хотя бы недавний https://github.com/neex/phuip-fpizdam - казалось бы питон идеален, но пок почму-то на го.>>1511956Ну они ж пиздец. В d куда проще.
>>1511968И чем питон идеален? Тем что для запуска тулзы у тебя в системе должен стоять питон? Нет спасибо.Незнаю что за го-пхп хуйня по ссылке, но у меня есть альтернативный пример. Рискну предположить что количество людей которые пользуются vscode на порядк выше тех, кому нужен эксполит для пыхи. vscode для поиска по проекту испольует ripgrep. Про то что все крупные игроки (мозила, гугл, мс, амазон, ...) так или иначе уже используют раст для своих нужд тоже отличный показатель.
>>1511975Класс. Напомню, вопрос был не в том кто использует раст, а кто разрабатывает на нём. ripgrep в контексте твоего примера - либа, на чём она написана не важно. В мире грепалок люди всё также продолжают использовать grep и egrep, они всё так же хороши для их задач. Мой пример - это новая утилита, автору было всё равно на чём её писать, но он взял и написал на Go. Так вот, почему Го, а не раст/плюсы/си? Потому что Го прост и достаточен для решения этой задачи. Ты просто берёшь блокнот и пишешь код на уровне между сишкой и вторым питоном, и получаешь что тебе нужно. Раст же тебе сразу диктует кучу требований к правильной архитектуре приложения, что для наколеночной тулзы уже слишком сложно.Обратный пример - Кубер. Он классный, но его сложность превысила инструменты языка и они напилили костылей только чтобы не переписывать всё на новом языке. Но почему они начали на го, если знали что пилят? Хз. > И чем питон идеален? Тем что для запуска тулзы у тебя в системе должен стоять питон? Нет спасибо.Для сборки гошного бинаря тебе тоже нужен компилятор. Питон просто намного более декларативен, что для Proof of Concept куда приятнее. В мире эксплоитов похуй на чём они написан, лишь бы работали. Куча скриптов вообще на повершелле, ибо винда.И да, покажи мне систему без питона. Нескучный DE для WSL не предлагай.
>>1512010> Но почему они начали на го, если знали что пилят?Они начинали на джаве, но потом сверху спустили команду форсить го.> Питон просто намного более декларативенИмперптивный донельзя, как и гопараша.
>>1512010https://github.com/search?utf8=%E2%9C%93&q=stars%3A%3E1000+language%3ARust&type=Repositories&ref=advsearch&l=Rust&l=Инфы по закрытым проектами, как ты можешь догадаться у меня нет, а про мои вряд ли тебе будет интересно, ибо confirmation bias. Но я уже не на первом месте работе пишу на расте. Нет, не блокчейн.
>>1512148К содалению, в списке полтора серьезных проекта, а остальное - очередные http-библиотеки и консольные утилиты
>>1511956И что такого в крестовых шаблонах тебе заходит? Они пиздецом перестали быть только в свежем стандарте с приходом концептов.Inb4 вариадик темплейтс, но я пока не встречал примера, где от вариадиков жизнь кардинально поменялась
>>1512234>И что такого в крестовых шаблонах тебе заходитДинамическая типизация. Когда ты используешь их по изначальному назначению - а именно как слегка типизированный вариант сишного препроцессора, они охуенны. Можно комбинировать алгоритмы в статике, можно, подставлять флоаты и т. д. Самое приятное, что это работает даже на CUDA.А концепты наоборот хуйня. Потому что одно дело тайпклассы, которые могут разрешаться ad-hoc, а могут тянуть за собой указатель таблицу функций и быть полиморфными в рантайме, концепты это просто способ чуть менее запутанно падать во время компиляции. Мне это вообще никак не помогает.
Анонс, такой проблем. Есть некий алгоритм, с 3 вложенными циклами, который имеет отличия в самом нижнем лвлfor x in (0..9){for y in (0..9){for z in (0..9){SOME_OPERATIONвот этот SOME_OPERATION бывает нескольких типов. Как бы тут и переиспользовать код, и не проебать оптимизации? Ну, чтобы и if или вызов внешней функции внутрь не засовывать, и копипастой не заниматься.Я придумал такой вариант - передавать параметром inline функцию, но что-то сомневаюсь - а конпелятор это норм отпимизирует?
>>1512240Дженерики растовые разве не то же самое? А если тебе нужен почти одинаковый — но таки разный — код для каждого типа, то простоfn foo<T, F>(t: T, f: F)where F: FnOnce() {} // or Fn() or FnMut()И пихаешь кложуру в этот <F>.>>1512246Пихаешь кложуру. Насчёт оптимизации не ебу, честно говоря, это надо гуглить.Почти всё про пихание кложур наглядно расписано вот тут:https://doc.rust-lang.org/rust-by-example/fn/closures/input_parameters.html
>>1512252Вот беру я код из примера по дженерикамuse std::fmt::Display;fn main(){ print_pro(10 as u8); print_pro(20 as u16); print_pro("Hello TutorialsPoint");}fn print_pro<T:Display>(t:T){ println!("Inside print_pro generic function:"); println!("{}",t);}Стираю :Displayfn print_pro<T>(t:T){ println!("Inside print_pro generic function:"); println!("{}",t);}Не компилируется. Он не может догадаться, что я вообще-то в функцию посылаю только типы, для которых все имплементировано. Нет, мне обязательно нужен на этот тип констрейнт. И понятно, почему - потому что это тайпкласс на самом деле, тип T на самом деле это пара указателей, на непосредственно данные T и на код таблицы функций Display, а функция параметрически полиморфна даже в рантайме. Ad-hoc оптимизации когда тип известен возможны, но это не главное.А в крестах без всяких баундов все скомпилируется, потому что шаблон это просто макроподстановка в статике.И вот допустим я пишу точную математику, и у меня есть тип данных Qfloat, который как double, только сильно жирнее. Далее мне нужна полифорная функция, которая может обрабатывать float'ы, double'ы и вот этот qfloat. На крестах я ее просто беру и пишу, поставив вместо типа темплейт. Если не хватает каких-то функций, я их реализую. При чем мне компилятор сам скажет, чего ему не хватает.А на расте https://rust-num.github.io/num/num_traits/float/trait.Float.htmlЙоба. Ребята, мне никогда в жизни не понадобится столько функций для моего qfloat. Поэтому возникает два стула, либо стабы, либо какие-то ебические количества микротрейтов. Это уже проходили в хаскеле, когда оказалось, что монада это апликативный функтор, а вот прелюдия думает по-другому.Короче, лично для меня отсутствие темплейтов это большой и бессмысленный гемор, который выливается в еблю с системой типов вместо програмиирования.
>>1512246Алсо крайне забавно что в крестах подобный код вообще бы вопросов не вызвал будет ли оптимизирован или нет.Можно даже тупо template<enum> сделать и свитч в коде ебнуть. Очень просто и наглядно.
>>1512269Круто, хули. Но в чём проблема написать два слова в T:?https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=fe7aa58b6b945075590d6a16f63e1762Для простеньких структур есть #[derive] вместо кучи прописываемых руками impl'ов.Тебе же не нужно вписывать в ограничения типа функции все трейты, нужно вписывать только те, которые ты используешь.Но да, писать надо чуть больше, чем в C++.
>>1512278А в расте нет вопросов по поводу того, будет ли оптимизирована передача кложуры.https://www.reddit.com/r/rust/comments/7y2h09/how_powerful_are_closures_really/
>>1512269Дядя, а ты не путаешь trait objects и generics? Дженерики-то как раз реализованы через мономорфизацию типов, прямо как шаблоны плюсов. А trait objects - это как раз те самые 2 указателя, прямой аналог виртуальных функций плюсов.
>>1512296>Но в чём проблема написать два слова в T:?Нужно знать эти два слова.Вообще это типичные два стула между статикой и динамикой. Темплейты - это динамика, которая не требует описания, но зато падает со стектрейсом. А вот баунды падают не так громко, зато требуют дополнительной бюрократической работы. Которая лично мне не пришей пизде рукав.
>>1512324Да тебе конпелятор прямо в ебло выдаёт эти слова, вроде "std::ops::AddAssign", "Copy" или "Send". Не вижу проблемы. А вот выгоды, если ты пишешь в команде хотя бы из двух человек — вижу. Потому что если ты хочешь передать в функцию некий тип, то ты сразу видишь, реализацию каких трейтов тип должен иметь. И тебе не надо ползать по функции, выискивая плюсы, минусы, шифты и прочее, потому что всё, что применяется к этому типу ты видишь прямо в начале функции.
>>1512329> Потому что если ты хочешь передать в функцию некий тип, то тыПиздуешь имплементировать трейты для того чтобы просто использовать функцию со своим типом. Даже если 90% функций трейта тебе нахуй не нужны.
>>1512332Ты так говоришь, будто ты каждый день по типу добавляешь, для которого надо трейт Float реализовывать
>>1512339Алсо, пикрил я сгенерил одним хоткеем за 2 секунды и ненужные методы можно не реализовывать.
>>1512332Если это простая структура, то тупо #[derive], а если сложная, то ты всё равно должен или имплементить Add, или оверлоадить +, если ты будешь его использовать в той функции. Вот только в расте ты можешь сразу посмотреть, есть ли нужные тебе трейты, даже не прогоняя код через компилятор. И какая разница, сколько функций трейта тебе нужны, если все они требуют имплементить только одну функцию? А если не одну-две, то нахуя ты вообще это трогаешь, если оно тебе не надо? Мне кажется, ты пришёл в раст, потому что раст на SO четвёртый год подряд "мост лавед", потыкался, попытался сделать то, что не очень приятно делать на расте, и разочаровался в языке.
>>1512269>>1512324>>1512332>>1512342Твоя проблема из пальца высосана. Хочешь писать C++-way - придется делать стабы. Хочешь писать по-нормальному - либо пиши свой трейт для типа, либо реализуй чужой трейт. Все это займет максимум час и проблем позже не доставит. И не надо говорить, что мол геморно - ты каждый день новые реализации float не пишешь, так что реализовать даже чужой огромный трейт - задача ненапряжная. Зато потом другим разработчикам (да и тебе самому) не надо будет ползать по исходникам, выискивая заиспользованные операции. По этой же причине в C++ завезли концепты, потому что намного приятнее увидеть интерфейс шаблонного параметра в самом начале шаблона, чем потом составлять этот интерфейс ручками и охуевать от километровых ошибок компиляции, когда ты с этим интерфейсом где-то проебался.Даже C++ отказывается от говнопрактики, которую ты юзаешь, а ты на Rust пеняешь.>>1512347alt-insert в idea
>>1512341Твой unimplemented реализован через panic и падает в рантайме. А в плюсах будет ошибка компиляции. Плюсы вин.
>>1512269Если твоя функция должна обрабатывать только стандартные флоаты и твой qfloat, то какого хуя ты нашёл num_traits крейт? Потому что функция, которая обрабатывает обычные флоаты не требует этого крейта, если только не имплементит все трейты для обычных флоатов (или не превращает флоаты в кастомную структуру за сценой. Тогда тебе надо имплементить только две функции, которые выглядят как "foo(q: qfloat) -> generic_float {}" и превращение в обратную сторону. Но если для обычных флоатов уже известны все константы, то тебе эти константы для qfloat надо знать, если ты хочешь реальное превращение оттуда-сюда и обратно. А это будет ебля хоть в расте, хоть в крестах) под этот крейт. А если тебе нужен этот крейт, то сперва будь уверен, что тебе нужен именно этот крейт. Потому что он очень специфичный, сделан под #![no_std]. И если qfloat ничем не отличается от обычных, то кто мешает тупо скопипастить имплементацию обычных?>>1512390https://docs.rs/num-derive/0.3.0/num_derive/derive.Float.htmlМуля, не нервируй меня!
>>1512390В Rust-е нет дженериков, которые сопоставляют шаблонный параметр с фактическим интерфейсом, заюзанным в шаблонной функции. И правильно сделали - хочешь использовать дженерики - укажи интерфейс шаблонного параметра заранее, блеать.А если хочешь использовать фичу, которая даже в самих плюсах с 20-го стандарта объявлена устаревшей - ебись с ошибками в рантайме. Да, анон, в C++20 от тебя требуют писать ровно те же трейты, что и в Rust. Только в Rust-е это обязательно, а в плюсах - можно забить и написать говнокод.
>>1512376И часто ты этим alt-insert пользуешься? Как вообще поддеркжа раста в идее? Сама иде не тормозит?
>>1512415alt-insert юзаю постоянно и во многих языках: C++, java, scala, rust. Плагин раста в идее работает еще хуже, чем скаловский, но выбирать как-то не приходится. Сама идея тормозит только в исключительных случаях, если выдать ей гигов 8 памяти (что все и делают)
>>1512422>Сама идея тормозит только в исключительных случаях, если выдать ей гигов 8 памяти (что все и делают)В смысле практически никогда не тормозит, если выдать ей дохера оперативы
>>1512523В расте вообще нет GC. Собственно, главное различие. Все остальные различия примерно те же, что между любым C-based-lang с ограничениями и растом. Но мало кто будет сразу ,да и вообще писать на D без GC потому что без GC он ничем не лучше крестов, а обратная совместимость, сам понимаешь. А в расте у тебя выбора нет, но он и без GC выглядит неплохо, пока ты не упираешься в какую-то грязь, которая требует ансейфа и изъёбов в основном это алгоритмы с нестандартными структурами данных и просто нестандартные или оптимизированные для чего-либо структуры данных.
>>1504241> Попробуй сначала из крудо-формошлепства перекатиться в чистый бекенд с кафками-куберами-облаками-grpc'ми-числодробилками-хуйлоадомА где этому учиться? Можешь посоветовать книжек и ресурсов?Мимо-embedded на си, который учит node.js и хочет заниматься дрочкой серверов
>>1512529> которая требует ансейфа и изъёбов в основном это алгоритмы с нестандартными структурами данныхКак двусвязный список, например? Очень нестандартная структура данных.
>>1512602Спасибо, Капитан. А если это был сарказм, то скажи мне, сколько раз ты использовал двусвязный список в своём коде? На каждую сотню использованных векторов и каждый десяток очередей? Как часто тебе нужен был модифицированный список?
Ананасы, нужна мотивашка учить раст. Ради интереса - без б, но исключительно интерес на хлеб не намажешь. Работы на расте почти нет. Что на нем пишут сейчас вообще?
>>1512611Толсто. И hh.ru чуть ли не самый худший вариант для поиска работы на расте, хотя и там иногда проскальзывают вакансии. Пока что Рашка не доросла до раста, ракорастов берут пока что только в Европке или Америке.
>>1512611раст основным хард-скиллом не идет вообще нигде. Только как плюс лолВ заголовках везде джава и макакаскрипт с сисярпом
>>1512621Нет, ибо на раст нет работы и так, что уж там про удаленку говорить, да еще и за 7к. Только если свою ОС на ржавом напишешь
>>1512602ну чтож...struct PieceOfShit { parent: Option<Weak<Rc<RefCell<PieceOfShit>>>>,some_data: String,child: Option<Weak<Rc<RefCell<PieceOfShit>>>>,}
>>1512828>child: Option<Weak<Rc<RefCell<PieceOfShit>>Зачем такая длинная запись, просто Option<RefCell<>> не катит?
>>1512978с виком я вроде слегка обосрался,но вот Rc<RefCell нужен для мутабельности (не мутекс конечно, но тоже неплохо)>>1509028а вот это я и пародировал
Попробовал ночную сборку Servo, пока очень сыро. Сначала он тупо валился т.к. не мог создать графический контекст Failed to create graphics context!: NoCurrentContext (thread main, at src\libcore\result.rs:1165). На angle завёлся. Мультипроцесс под виндой тоже не работает [2019-11-04T17:18:21Z ERROR constellation::pipeline] Multiprocess is not supported on Windows or iOS.
>>1513246>пока очень сыроhttps://wiki.mozilla.org/Oxidation#ShippedСухим он никогда и не будет, все готовые куски просто тащат в фф и мерджить с гекко, а в серво будут тащить новые экспериментальные фичи.
>>1512602Ну давай сравнивать, где больше изъебов и где понятнее код.http://cs.brown.edu/people/jwicks/libstdc++/html_user/stl__list_8h-source.htmlhttps://doc.rust-lang.org/src/alloc/collections/linked_list.rs.html#38-43
>>1513367Так себе сравнение если честно, для меня нет победителей. С++ просто нечитаемое говно, а раст при первом же упоминании list скатывается в unsafe
>>1512578> А где этому учиться?На работе, на должности бекенд-разраба.> Можешь посоветовать книжек и ресурсов?Пикрилы например, + видосы со всяких highload'ов. Первое для получения хоть какой-то базы, второе чтоб контекст в голове получился.> node.js> дрочкой серверовПосмотри на хх, сколько вакух на чистый js backend, и сравни с питоньим и гошным бэком. Почитай, что хотят в вакансиях. И походи по собесам. Так, для понимания рыночка.Тебе понадобится знание языка, платформы+фреймворка, какой-нибудь sql/nosql-бд, какого-нибудь брокера сообщений, общие поверхностные знания о сетях/протоколах/форматах данных/способах предоставить api, и умение пользоваться докером с каким-нибудь оркестратором (compose/swarm/кубер).
>>1513456У Сишки нет генериков, и даже без них Раст даёт банальные вещи вроде человеческого стектрейса по ООМ, который в Си нужно отдельно вкорячивать костылями. У всех остальных языков к двунаправленному списку нужно прибавлять весь код сборщика мусора, потому что без него он не имеет смысла. Мораль в том, что двусвязный список - это нифига не что-то тривиальное, если браться серьезно. А ансейф - это часть языка, причем далеко не повсеместно нужная.
Всё-тки, аноны, нужно пробросить в дочернюю структуру постоянно хранимый коллбэк, иначе никак. И, знаете, очень странно, что с этим пиздец какие сложности. Постоянно "self doesn't live long enough" и подобная ебола. Вот как объяснить конпелятору, что это, сука, родитель, передаёт коллбэк, сука, потомку, которым сам же и владеет, а посему потомок никак родителя не переживёт и можно конпелять. Вот как?https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c2b0c60df88a888b0e68705f36bfd6ab вообще шедеврально:note: ...so that the types are compatible: expected &&mut Parent<'_> found &&mut Parent<'_>note: but, the lifetime must be valid for the lifetime '_ as defined on the impl at 13:13...
>>1513976Потому что ты вызываешь функцию чайлда на данные парента. И данные парента не должны сдохнуть до того, как сдохнет чайлд. Конпелятор не может этого обещать, потому что вызывает drop() на весь парент, а не на куски его данных. И я до сих пор не могу понять, нахуя тебе вот это вот наследование, если оно в расте реализуется только через уёбищное Box<dyn TraitObject>. Тем более, у тебя нихуя нет наследования, потому что парент i32, а чайлд u32. Если тебе надо только строку расшарить, то Rc<String> и клонируешь стронк референс. А если тбе иногда надо мутать эту строку, но ты её мутаешь редко и не в цикле, то Rc<RefCell<String>>, там оверхед маленький, если постоянно не менять эту строку. А если тебе эту шнягу из разных потоков надо менять, то Arc и Mutex.
>>1513994>данные парента не должны сдохнуть до того, как сдохнет чайлд>Конпелятор не может этого обещатьэм, а почему, собсно? Ведь чайлд, это тоже данные парента. Как, разве может парент проебаться, а чайлд - нет?>надо только строкув том и дело, что это только в этом примере. В реальности без коллбэка никак ну никак, мам!
>>1513994>наследованиене смотри на данные, нет там цели что-то отнаследовать, эт я так, для более дальнейшего примера добавил и забил, а удалить забыл.
>>1513996Что мешает сделать так?struct Data { vec: Vec<usize>, other_vec: Vec<f32> }pub struct Parent { d: Rc<Data>, p: i32 }struct Child { d: Rc<Data>, c: u32 }
>>1513998>Что мешает сделать так?Через Rc<RefCell<Mutex<Box<Uebox<... все могут. А я хочу понять, какого конпелятор по-умолчанию считает, что парент может проебаться раньше чайлда (или что там значит его ругань на лайфтаймы, если не это самое)
>>1514002Если бы у тебя былоstruct Parent {}struct Child { p: &Parent, c: i32 }То конпель и слова бы не сказал, потому что ссылку на парент ты передашь только с лайфтаймом. А про ссылку на часть данных я тебе уже рассказал, так что не нервируй меня, Муля.Но если интересно, почему ссылка без овнершипа недействительна, смотри Pin в стандартной библиотеке.
>>1514002А, чёт в глаза ебусь. У тебя же child — это кусок парента. А ты хочешь из чайлда вызвать функцию на другой кусок парента. Это селф-референс, правильно я тебя в Pin отправил. Если прочитал про Pin, но нихуя не понял, то загугли repr(Rust) в номиконе. И если у тебя чайлд — это кусок парента, то хули ты просто из парента не вызовешь функцию? Ты же можешь тупо достать любые данные чайлда, потому что он кусок парента. То естьimpl Parent{ fn wtf(&self) -> AnyType { let data = self.child.get_data(); return self.do_smth_with_data(data) }}
>>1514022> прочитал про Pinпрочитал, чё-т примерно понял, что данные в расте могут мотаться по памяти туда-сюда. Ухх.>хули ты просто из парента не вызовешь функциютому що, в реальном примере смыл в том, чтобы её позвал чайлд (один из).
>>1514038В таких случаях пихаешь парентов и чайлдов в разные коллекции (типа как в SQL) и хранишь в объектах не ссылки, а индексы в векторах.
Купили как-то суровым сибирским лесорубам японскую бензопилу.Собрались в кружок лесорубы, решили ее испытать.Завели ее, подсунули ей деревце.«Вжик» — сказала японская пила.«У, бля...» — сказали лесорубы.Подсунули ей деревце потолще. «Вж-ж-жик!» — сказала пила.«Ух, бля!» — сказали лесорубы.Подсунули ей толстенный кедр. «ВЖ-Ж-Ж-Ж-Ж-Ж-Ж-ЖИК!!!» — сказала пила.«Ух ты, бля!!» — сказали лесорубы.Подсунули ей железный лом. «КРЯК!» — сказала пила.«Ага, бля!!!» — укоризненно сказали суровые сибирские лесорубы! И ушли рубить лес топорами…
>>1514038То есть, у тебя есть N переменных, и все они должны читать одни и те же данные? Этоstruct Data<T, U> { some_data: T, other_data: U }struct Child { d: Rc<Data> }impl Clone for Child {fn clone(&self) -> Self {Self { d: Rc::clone(&self) }А если они ещё и менять данные должны, то либо Rc<RefCell<T>>, либо Arc<Mutex<T>>, либо ансейф.Ты хотя бы Книгу прочёл, или сразу пошёл код хуярить?
>>1514057>у тебя естьУ меня есть плюсовый код ndk приложения для ведроида с кучей unsafe вызовов к api ведроида и коллбэков, как завязанных на api, так и чисто внутренних.Сейчас я просто решил внутренний коллбэк переписать в растовом стиле, без этих *mut ctx и прочей жути.Можно, конечно, переосмыслить и переписать раставейно, но я бы предпочёл сперва получить рабочий вариант, а уж потом его переосмыслять.И да, книг не читал, т.к. у меня в голове так ничего не откладывается. В режиме поиска ответов на возникающие вопросы оно как-то лучше прёт.
>>1514082То есть, вместо того, чтобы тыкать во врага копьём, ты пытаешься руками затупить наконечник, чтобы потом можно было махать как дубиной? Как же был прав анон с анекдотом про лесорубов.Короче, либо листаешь быстренько Книгу, особенно внимательно читая семнадцатую главу, либо пиздуешь писать на том языке, который уже знаешь. Если не хочешь Книгу, то читай rust by example, там та же книга, но в виде комиксов.А если вообще ничего не хочешь читать, то либо дай уже ссылку на то, что ты реально хочешь сделать, либо пихай селф-референс через ансейф Pin, либо делай как тут написано >>1514057
>>1514090Начиная от юзерской и крудовой хуиты (любое приложение со списком: плеер/контакты/список дел, любое приложение с вкладками: браузер/файловый манагер/консоль, любое приложение где нужно undo-redo: текстовый редактор/wyswig редактор/редактор таблиц, любая круд залупа в конце-то концов и тд), проходя байтойобство (любой GC, любой тред манагер, любая система сборки и тд), и заканчивая хуай-теч еботой (любой конпелятор, любая распределёнка, любая jit-вм). Вот нигде, блядь, не нужная структура данных. Я хз вообще что ты там можешь писать.
>>1513367Ну, в плюсах и сях, в отличие от раста, списки обычно все делают руками (или юзают буст, если он уже есть в проекте), ибо неинтрузивный список = 2x оверхед от ожидаемого, и std::list персона нон грата в любом проекте, так что сравнивать странно.Кстати, а во что разворачивается растовый LinkedList? Хранит ссылку как std::list или инлайнит данные? Вангую что первое, и в расте по-хорошему так же надо делать сырые списки руками, гыг.
>>1513585Лень гуглить, как выглядят генерики в расте? Просто указываешь от чего наследовать шаблонный параметр?В джаве ебанина какая-то переусложнённая
>>1514158Ну так генерики джавы придумал Одерски (автор скалы), оттуда и type erasure, и прочая околоакадемическая ебанина.
>>1514129> Хранит ссылку как std::listКак там в С++03? У нас тут в будущем появились операторы перемещения и прочие ништяки.
>>1514129Сорцы же можно посмотреть из доков.https://doc.rust-lang.org/src/alloc/collections/linked_list.rs.html#38-43Лист состоит из нод, нода — структура из данных и двух указателей (с размером указателя, даже несмотря на обёртку Option<>, потому что NonNull<> указатель, а Option::None разворачивается в null, которого в расте нет, только в байткоде раста). Это вроде как интрузив.>>1514158Как foo<T>( variable: T) -> T { return variable }Где T — любой тип, позволяющий производимые операции. Выглядит так, работает чуть иначе, чем выглядит.
>>1514164https://baptiste-wicht.com/posts/2012/12/cpp-benchmark-std-list-boost-intrusive-list.htmlНу такое.>>1514170>Это вроде как интрузив.Это вроде как набор слов. >структура из данных и двух указателейЕсли данные таки лежат отдельно — то это не интрузив нихуя.
>>1514182А что ты хочешь? Какую-нибудь ультра-ансейфmem::transmute<Node, T>(node)структуру вообще без обозначения этой структуры, чтобы какие-то байты там отвечали за данные, а какие-то за указатели, но процессор при этом вообще бы не знал, какие там данные за что отвечают? Иди читай repr(rust) главу в номиконе, тебе и так компилятор оптимизирует всё то, что по стандарту С не оптимизируется, а ты хочешь какую-то магию ебаную, которую даже на ассемблере не сделать.
Ребят, подскажите, что я делаю не так.#![feature(alloc, heap_api)]use std::alloc::heap;сразу же вот такая ошибка отдаетсяunresolved import `std::alloc::heap`Где теперь искать heap? Очень нужно выделять куски памяти произвольного размера простым api.
>>1514122Немного неясно выразился. Я говорил не о списке, как он определяется в линейной алгебре, а о структуре данных «двусвязный список» с O(1) добавлением/удалением в конец/начало/середину и с возможностью обратного прохода по списку. Ни разу не встречал еще необходимости именно в полном списке этих свойств. Всегда список можно было заменить на односвязный или на банальный массив
>>1514158Смотри обсуждение выше по треду. Вкратце - дженерики тут охуенные. И баунды, которые тебе не нравятся в джавовских дженериках есть в расте. Как и в С++20, лол
>>1514193Был box кейворд, но его так и не стабилизировали. Смотри функции вот тутhttps://doc.rust-lang.org/alloc/alloc/index.htmlИли в std::allocВ коре аллока нет, если ты микропроцессор через core пишешь.
>>1514195Ещё один блядскую магию хочет. В любую точку списка тебе O(1) не вставит, потому что дойти до этой точки по указателям — O(N). O(1) только туда, куда у тебя уже есть указатель. Обычно это начало и конец.
>>1514202Ну т.е. мне нужно смотреть в сторону функции alloc_array и юзать ее для u8, если я хочу получить аналог malloc из c, я правильно понимаю?
>>1514191Я хочу, чтобы данные просто лежали в памяти вместе с ссылками. Для понимания: в плюсах для этого просто наследуются от класса с ссылками и всем остальным. В расте способов замутить такое (кроме макросов, которые ниебически раздуют код) как я понимаю, нет?>>1514195Ну так перечитай моё сообщение, я тебя правильно понял, и все примеры в том посте именно о структуре данных, лол. Как ты что угодно с undo-redo/вперёд-назад или lru без него замутишь?
>>1514207https://doc.rust-lang.org/std/alloc/struct.System.html#method.allocВ душе не ебу, пока что никогда руками память не выделял, кроме всяких стековых векторов. Но там же доки охуенные, всё описано.
>>1514210Ты ёбнулся? Я тебе дал ссылку на сорцы, рассказал, что структура для данных хранит в себе не только данные, но и два указателя. А ты начал пиздеть, что не интрузив. А что тебе тогда интрузив, ебанутый?
>>1514204Маня, вставлять в список можно, имея итератор. Совсем необязательно идти в место ставки, чтобы вставить/удалить элемент
>>1514215Это ты про итератор который может инвалидироваться и ты начнешь писать хуй пойми куда? Классические кресты?
>>1514215Это в том списке, в котором указатели не в структуре с данными, а в массиве на стеке лежат. А в нашем тебе надо по куче бегать по указателям: берёшь ячейку, берёшь из неё указатель, берёшь по нему следующую ячейку, берёшь из неё указатель... И так пока не найдёшь нужную ячейку.
>>1514214Пока пиздел тут, загуглил типы данных раста, и понял что это не интрузив лист нихуя.В таком листе лежит 3 ссылки (и длинна зачем-то), вместо 2 ссылок и данных. В первом случае для доступа к данным после того, как мы доитерировались до нужной ноды, нам придётся лезть в рандомный кусок памяти хуй пойми где на бенчмарках это редко видно, потому что твоя программа в одиночку активно срёт в память, хотя даже по ссылке выше видно разницу в простом бенчмарке но ирл без компактирующего гц ноды раскидывает по всей оперативке), а в первом данные всегда будут в кэше сходу, как только мы дошли до ноды. Так понятно?
>>1514227PhantomData — не ссылка, а структура с нулёвым размером, которая просто говорит компилятору, что у нас тут Box<T>, а не Option<NonNull<T>> (который и есть Box<T>, что я тебе в самом первом посте объяснил. И нет, у нас тут не C, где нулёвые структуры занимают 1 байт, у нас раст, где нулёвые структуры занимают 0 байтов).И если ты мне сейчас не скажешь, как ты хочешь, чтобы выглядел псевдо-байткод, то я с тобой разговаривать не буду больше. А когда ты мне покажешь байткод, я тебе скажу, что он точно так же выглядит в расте (и даже лучше в большинстве случаев, потому что компилятор сам оптимизирует расположение элементов в структуре, а твои кресты с обратной совместимостью так не могут).
>>1514227Да ёптваю мать. На пике структура Node. Она содержит в себе две ссылки и объект (НЕ ССЫЛКУ НА ОБЪЕКТ, БЛЯТЬ). Как только мы дошли до ноды, нужные данные лежат ровно на 16 байт ниже этой ноды (А НЕ В РАНДОМНОМ МЕСТЕ, БЛЯТЬ). Определись, что тебе надо. Я не знаю, может ты хочешь выделять память на стеке. Тогда тебе растовый LinkedList не поможет. Но у меня ощущение, что ты сам не знаешь, что несешь.
>>1514232>>1514236Блять, я всё это время смотрел на структуру LinkedList вместо Node, и понял это только когда посмотрел на LLVM IR.Извини, антоша, что порвал тебе жепу, я не специально.
>>1514247А еще я прочитал-таки твою ссылку:>For the intrusive list variations, the data are entered into a vector and then pushed back to the intrusive list.Оказывается вызывать malloc один раз - это быстрее, чем вызывать его один раз. Удивительные открытия.
>>1514236Не факт. Оптимизация компилятора таки может сунуть любое поле структуры куда захочет.https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1c4650ca4dad0d7a327689e4e495785a
>>1514371repr(C) называется. Вот только ты уверен, что разберёшься с памятью лучше конпеля? Эта структура без оптимизации занимает на четыре байта больше.
>>1514398Забыл пример добавить.https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=da3ad6bc2e93e16b2fb29aa6be6e6e35
>>1514404Сударь, ваша карта битаhttps://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=860789dcb2dd6ffa5685487377bcdafcда, читал про подводные камни
>>1514424Ты же знаешь, что packed просто так работать не будет? Что это ансейф для процессора, и каждый раз, когда ты что-то делаешь с запакованной структурой, ты должен чётко понимать, что делаешь?https://doc.rust-lang.org/nomicon/other-reprs.html#reprpacked
>>1514435>поменялись местами "aaaa" и "cccc"Справа налево, от младшего бита к старшемуhttps://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=03c41a0e7b3b95adbcb4b8e635522ae9>>1514430>ансейф для процессораБаюс - баюс. Зато можно в файл писать-читать предсказуемо. Хотя, впрочем, не пробовал.
Бля, сук, сильно не пинайте, но вона, чего наваял.https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=c396822b2e2cfaf9dff8da2987582799даже не знаю, что хуже - это, или обёртывания Rc<RefCell<...
>>1514460а, да, это найтли, но и похуй. В стейбл арифметику указателей не завезли, но куда без неё - рано или поздно этот ptr_offset_from или что-то наподобие стабилизируют.
>>1514460Поздравляю! Выглядит так себе, но если работает, то хули тут.>>1514463Может и завезут, но она в расте не нужна, если ты не с FFI работаешь.
>>1515687Уже много часов как. И картинку твою лучше под было кинуть под эту ссылку:https://tokio.rs/blog/2019-10-scheduler/
О, переделал метод из fn в async fn - и оно без задней мысли сконпелировалось. И что, даже работать будет?Это я всё с переписыванием с крестов - в крестах для вызова этого метода аж поток форкался.
>>1516072Откуда мы можем знать, будет ли оно работать, если мы не знаем, что должно работать? Но вообще, да, должно. Async возвращает Future, которая сама по себе ничего не делает. Чтобы она что-то сделала, надо её выполнить. Но вот когда ты будешь её выполнять, это уже сам решай.https://rust-lang.github.io/async-book/01_getting_started/04_async_await_primer.html
>>1516112Вот, эт самое, а можно её выполнить без блокировки? Ну, тип, надо мне записать файл - чтобы оно там как-нибудь пошло записываться, а выполнение дальше пошло.
>>1516122Для этого нужен экзекутор, в std его пока еще нет.https://docs.rs/tokio/0.2.0-alpha.6/tokio/
>>1516122А зачем тебе async, если тебе просто в файл записать что-то надо? Не проще заспавнить тредак, который этот файл обработает? А если тебе надо убедиться, что два тредака не полезут в один файл, то там всё равно будут блоки, вроде FIFO очереди с задачами, где следующая выполняется после того, как предыдущая вернула некое Ok(imma_done).
>>1516143>Не проще заспавнить тредакДак там у меня полно raw пойнтеров, а с ними "cannot be sent between threads safely".
>>1516161https://doc.rust-lang.org/stable/std/?search=from_rawВыбираешь нужный тип и вперёд. А если тебе нужен не смартпоинтер, а тупо атомик примитив, то выбираешь из этихhttps://doc.rust-lang.org/stable/std/sync/atomic/index.htmlи создаёшь этот атомик из значения своего рав поинтера.
В-обсчем, аноны, соснул я с тредами.Что так через тупо вызов треда, что эдак через async & LocalSpawn - получаю 'Unable to spawn: SpawnError("shutdown")' даже на вызове пустой функции-заглушки без параметров.Надо попробовать воспроизвести на чистом примере и багулю куда-нить репортнуть.И да, это я всё под ведроид корячу.
>>1516501Короч, завелось асинхронное сохранение. Сделал тред, в который передаю AtomicPtr (спасибо, аноний), до этого передавал слайсом, который получал через from_raw_parts. Но, что странно, версия с LocalSpawn вылетела вообще без передачи каких-либо параметров. Но это, мож я проглючил и затестил старый бинарь.Можете меня поздравить, у меня теперь есть рабочая аппликуха, представляющая собой переписанный пример камеры отсюда https://github.com/android/ndk-samples/ (я взял texture-view и добавил в него функционал съёмки и сохранения из basic)Осталось теперь работу найти.
>>1516561Ссылок и примеров реального кода не будет? Да и переписывать что-то на раст, балуясь ансейфом и голыми указателями просто так, а не ради оптимизации — так себе затея.А ещё, я проебался немного по поводу AtomicPtr, он Sync, а не просто Send.
>>1516565>Да и переписывать что-то на раст, балуясь ансейфом и голыми указателями просто такЭто я пока только пример переписал, дальше буду делать из него полноценное приложение. Буду брать за него деньги и жить на острове в гареме с наташками. Если не фартанёт, то выложу в попенсорс.Что касается голых указателей - без них никак, так как там идёт очень плотное взаимодействие с API.
>>1517786А у него там реалтайм-залупа? Подозреваю какую-нибудь дорисовку рожиц на лицах, но в андроиде уже по идее все либы для этого есть, чтобы прямо из явы дёргать, ну и в самом андроиде всякие апи, которые эффективнее не реализуешь, а FFI в любом языке одинаково работает.
>>1517800Ну хочет написать имиджпроцессинг/игровой движок/кроссплатформенный гуй на (без гб памяти на старте) — пусть пишет. Низкоуровенных библиотек (тем более на мобилках, часах итд) всегда поле непаханное, тем более что всё дырявое как ебаное сито (что ведро что айос). Я хз чего ты доебался.
>>1517746Мне ko-ko-kotlin не интересен, в отличие от раста. С другой стороны - писать хайлоад-сервисы в качестве домашнего проекта не интересно, а вот приложуху - оче даже. Так что, в лучшем случае у меня будет приложение и прокачка в расте, в худшем - только прокачка.Алсо, сам по себе нативняк при работе с камерой позволяет решать "в лоб" задачи, для которых на жабе/котлине пришлось бы пуд соли съесть, чтобы работало и не тормозило.
>>1518129>нативняк при работе с камерой позволяет решать "в лоб" задачи, для которых на жабе/котлине пришлось бы пуд соли съесть, чтобы работало и не тормозилоКакие? Т.е. что конкретно ты будешь делать?Для обработки пикселей должны уже быть либы готовые, с NEON-оптимизациями, раст тебе в этом не поможет. Там конечно есть интринсики, но вряд ли ты их будешь писать сам, т.к. та ещё еботня. Да и не сильно сложнее вызывать асм-код из явы (т.е. скомпиленный отдельно ассемблером), интринсики реже используют на практике.Я не к тому, что раст не нужен, просто интересно зачем тебе он понадобился на андроиде.
>>1518138>либы готовые, с NEON-оптимизациямиДля обработки пикселей есть renderscript или vulkan, если уже по-большому ходить.>понадобился на андроидепрост. NDK жи есть, но на стрёмных плюсах. А тут я хочу на модном расте попробовать, ну и самоцель - больше в изучении языка.
Аноны, а есть какой-нибудь парсер раста в виде отдельного крейта? Чтобы можно было вытащить все сучности из кода, функции там, их параметры и проч. Для чего:есть куча ffi функций вида ACaptureRequest_setEntry_rational , ACaptureRequest_setUserContext и т.д., которые принимают первым параметром "request: *mut ACaptureRequest" - хочу через build.rs нагенерить для этого всего обёрток, чтобы автокомплит работал.
Посаны, а это правда, что если раст выстрелит и будет везде юзаться в системщине, то хацкеры вымрут как вид, ибо нечего будет эксплоитить? Или это маняфантазии?
>>1520396>маняфантазииThis.Даже если всё переписать на руст, unsafe процессор всё равно вылезет и начнётся: meltdown, spectre, хуектер. А если мы закатаем процессор в ещё 3 виртуальных процессора, то начнутся дырявые сетевые протоколы. А потом, когда и их залатаем, для пущей безопасности надо хотя бы размещать датацентры в космосе будет.
>>1520486Ну ты сейчас берёшь, открываешь радномный ченджлог рандомной скриптохуйниhttps://www.php.net/ChangeLog-5.phpи наслаждаешься >Mbstring:>Fixed bug #77370 (Buffer overflow on mb regex functions - fetch_token). (CVE-2019-9023)>Fixed bug #77371 (heap buffer overflow in mb regex functions - compile_string_node). (CVE-2019-9023)>Fixed bug #77381 (heap buffer overflow in multibyte match_at). (CVE-2019-9023)>Fixed bug #77382 (heap buffer overflow due to incorrect length in expand_case_fold_string). (CVE-2019-9023)>Fixed bug #77385 (buffer overflow in fetch_token). (CVE-2019-9023)>Fixed bug #77394 (Buffer overflow in multibyte case folding - unicode). (CVE-2019-9023)>Fixed bug #77418 (Heap overflow in utf32be_mbc_to_code). (CVE-2019-9023)>Phar:>Fixed bug #77247 (heap buffer overflow in phar_detect_phar_fname_ext). (CVE-2019-9021)>Xmlrpc:>Fixed bug #77242 (heap out of bounds read in xmlrpc_decode()). (CVE-2019-9020)>Fixed bug #77380 (Global out of bounds read in xmlrpc base64 code). (CVE-2019-9024)вот вообще ни разу не так.Потом мотаешь ниже и там всё по новой>Fixed bug #73279 (Integer overflow in gdImageScaleBilinearPalette()).>Fixed bug #73280 (Stack Buffer Overflow in GD dynamicGetbuf).>Fixed bug #72482 (Illegal write/read access caused by gdImageAALine overflow).>Fixed bug #72696 (imagefilltoborder stackoverflow on truecolor images). (CVE-2016-9933)>Imap:>Fixed bug #73418 (Integer Overflow in "_php_imap_mail" leads Heap Overflow).
>>1520558Я тебе про другое.https://www.cvedetails.com/vulnerability-list/vendor_id-2337/product_id-4096/ даже наличие манажед языка не избавляет от проёбов.
>>1520558>gdImageScaleBilinearPaletteКак раст спасет от ошибок в сишных либах? Или ты предлагаешь все окружение на расте переписать? К тому же сейчас можно пересобрать либы с защитой стека, и ROP-ы не так страшны как раньше.
>>1520571Ну так эта ветка диалога и началась с фразы "а шо если всё переписать на руст"?>К тому же сейчас можно пересобрать либы с защитой стекаВедь все в мире аутисты гентушники, и собирают под себя весь мир.
>>1520573>Ведь все в мире аутисты гентушники, и собирают под себя весь мир. Если тебе безопасность важна, то это сделать гораздо проще, чем переписать все окружение на другом языке.
Аноны, какой же пиздец.https://github.com/rust-lang/rust/issues/28687только у меня эта хуйня всплыла и сразу нагуглилось.
Аноны, ecть одна строка, которую нужно проматчить.. Все уже напряглись, я чувствую. Её нужно проматчить другой, сука, строковой переменной. Это вообще возможно?
>>1520809https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=9efe69b12d61db429d3ffe19ef22252b
Аноны, чего притихли? Давайте, хвалитесь, чего за неделю накодили.Я, вот, распарсил через ебаный syn не, ну на кой мне в ast запятые со стрелочками? Бошку сломал, пока структуру разгреб выхлоп bindgen и сделал симпатичную обёртку поверх андроидных структур. Навряд ли это где-то ещё пригодится, так как в андроиде оче удобно это всё поименовано: СтруктураНейм_методНейм, но мне должно помочь.
>>1522042Я всю неделю ходил на работу и массаж/лфк. Мне сейчас не до наворачивания своих проектов на расте в свободное время
Ананасы, зачем в расте unsafe? Ведь если не пихать код в ансейф вообще, то его будет невозможно взломать, 0 шансов на переполнение стэка/кучи/использования данглинг поинтера и т.п.Или есть подводные? Ну или как всегда "хуяк-хуяк и в продакшн" превыше всего?
>>1523018unsafe иногда дает такие возможности, что-бы которые реализровать в сейв нужно затратить куча ресурсов.например банально скопировать цвет из u16 в [u8, u8, u8, u8]. (хотя может я уже устарел и такая фича есть в сейве, но тем не менее)еще удобно писать сейф враперы под С либы из ансейв кода.
>>1523062>скопировать цвет из u16 вуже есть to_be_bytes/to_le_bytes. А вот обратно пока вроде ансейф.>удобно писать сейф враперы под СВзаимодействие с сишным кодом - в принципе unsafe. Какой-то, хуй его знает откуда полученный, указатель, а ты его хуяк - и дереференсишь в конкретную структуру. Смысл в том, что если на этом месте у тебя сегфолт наебнёт, то ты сразу знаешь, куда копать.
>>1523018Затем, что раст — системный язык. Собственно, этим всё сказано. Но если ты хочешь примеров, то пожалуйста.Имплементить Send и Sync для кастомной структуры — ансейф. Либо не балуешься кастомными структурами, которые не ловят Send и Sync автоматом, что охуеть какое ограничение, либо сосёшь лапу.Голые указатели. Тут даже говорить ничего не буду, потому что растовая ссылка — голый указатель с обёрткой лайфтайма для компилятора.Всякие страшные байтоёбища, тот же mem::transmute, что иногда очень удобен, но очевидно, что сейф трансмута не было и не будет никогда. Вот тебе пример, где без трансмута хуй обойдёшься: >>1514404
>>1523018Без ансейфа ты сможешь... ты не сможешь написать ничего. Тебе все равно нужен IO, взаимодействие с внешними либами, а оно by design unsafe, так как хуй пойми откуда там появляются указатели, как работают функцуии и т.п. То есть ты даже hello world не напишешь без unsafe, строго говоря.Альтернативой может быть разве что ОС и весь софт, написанный на расте, работающий поверх архитектуры, в которой раст это машинный язык (ведь мы понимаем, что использование ассемблерных вставок это тоже unsafe, да?).
>>1523454>архитектуры, в которой раст это машинный язык Система типов безопасного раста тупо не позволяет выразить вещи типа растущего массива произвольного размера.
>>1524290Да она нихуя не позволяет. Вот, скажем, есть для разных примитивов такая штука какpub fn to_ne_bytes(self) -> [u8; 8]И на самом деле это просто обёртка для mem::transmute(). Или обёртка обёртки для mem::transmute(), смысл от этого не меняется.Вообще, мы как-то слишком дохуя пиздим про очевидность того, что без unsafe раста не было бы раста вообще. Или был бы со сборщиком мусора.
>>1524533Но, заметь, оно стабилизировано - то есть, разработчики мамой клянутся, что будет работать. Да и, тащемта, весь конпелятор внутри unsafe - как иначе-то с памятью работать, чтобы тебе safe вектор наружу предоставить?
>>1524536Да так и я о том же, что никак. Но вот как отсюда >>1523018 началось, так мы и пиздим уже два дня на тему "зачем в расте unsafe", хотя всё очевидно.
>>1524559Нет. Ансейф в тыкву превращает всё, до чего прикасается. Хотя обычно это ограничивается границами функции, реже — модуля.https://doc.rust-lang.org/nomicon/working-with-unsafe.html
>>1524566Поэтому я для своих ансейфов написал дебажный макрос, в котором тупо вываливаю в лог, что за ансейф вызов и откуда зовётся, а после вызова репорчую об успехе. Так сразу видно, что и где упало.
>>1524575А можно его посмотреть? А то статик анал-лизаторов в раст кроме бороу чекера пока не завезли.
>>1524577>посмотретьДа ничего хитрого, собсно. Потом прямо в этот макрос заворачиваешь свой вызов и вперде. Можно даже с фигурными скобками, чтобы с/на простой unsafe легко менять было.
>>1524581А хорошо выглядит, слушай. Только со статусом непонятно. Это для случаев, когда ансейф вызов завершился неудачно? Типа меняешь no_check на check_zero и ловишь код выхода, с которым программа завершилась после этого ансейфа?
>>1524594Это на случай вызова ffi функций, которые результатом возвращают код статуса со смыслом 0 = успех, остальное = фейл.Есть ещё макрос для функций, у которых возвращаемый статус имеет некий enum тип - там в случае ошибки можно вывести строкой значение статуса.
Самая конченная говнораст-мразь. Я её нашёл, возможно https://tsar1997.blogspot.com/2019/11/blog-post_16.html
>>1526283Почему у этого зумера-додика так печёт от ||? Почему он так цепляется к одинаковым идеям? Есть хоть один язык ничего не пиздивший ниоткуда, лол?
>>1526287Потому что он не удосужился хотя бы ржавый мануал пролистать, а просто начал хлопать рваной жопой от вида двух палок.
>>1526287Потому что он не умеет работать, может только "хайпить" хр-тьфу, блять! и лепить ярлыки на всё подряд. Он как попугай: вообще похуй что сказать, лишь бы кукарекнуть.Майкрософт вечно ебутся с багами — "долбаёбы, мелкомягкие мастдай, хуле". Майкрософт заебала ебля с дырками в ансейф крестах и они ползут на раст в критичных узлах — "пидарасы, код писать не умеют, юзают какую-то парашу".Тут нет смысла что-то обсуждать. Хочешь обосрать раст? Отлично, иди подсоси этому добоблогеру в комментариях. Хочешь поспорить с попугаем? Дон Кихот аплодирует тебе стоя. Хочешь решать реальные задачи? Тогда не читай бложик со смысловым наполнением в стиле "Дом-2".
Аноны, я тут, короч, всю неделю проебался с переводом камеры на свои врапперы, которые делал предыдущую неделю. Всё, работает, збс. Теперь, вот, осталось избавиться от Option, которые пришлось использовать во множестве, так как в ебаных плюсах сперва инициируется структура с кучей null полей, а уж потом они заполняются. Старался писать 1:1, поэтому вот так.Какие у вас успехи?
Суп программач. Поясни по хардкору. Какие задачи решает раст? Что на нём делают?На данный момент я веб макака питон/жс вот думаю взяться за какой-нибудь ещё язык чтобы расширить кругозор. Думал учить го, т.к. стильно, модно, молодежно, но хочется выбрать проект который ближе по моему мировоззрению. Вот мозилла мне ближе чем Гугл, поэтому сейчас рассматриваю раст. Пока не знаю чего сам хочу от языка, узнать бы что на нём можно делать.
>>1527361С таким подходом можно только нахуй идти. Если ты питономакака, то не лезь сюда, а иди в предназначенный для этого язык - GOвно. Писать тут можно всё то же, что и на крестах.
А можно в VS Code как-то запилить автодополнение для подключаемых крейтов? Очень напрягает, что надо смотреть в доках как там пишутся поля/функции.
>>1527594Не завезли ещё. Все слишком ленивы, чтобы такое написать, поэтому просто на crates.io заходят и жмут эту кнопку.
Как же я заебался. Помогите сделать портянку. Есть один асинхронный метод, который должен возвращать некие данные. В нём идёт открытие файла, если ошибка открытия - через match в обработчике ошибки надо выполнить ещё одно открытие файла опять с обработкой ошибок. Надо чтоб было в пакете в пакете. Проблема в том, что не получается одновременно возвращать нужное значение и делать возврат из обработчика ошибок, т.к. обработчик ошибок требует один тип, а из метода надо другой. Причем это говно идёт по цепочке из вложенного обработчика. Если делаю в конце Err(e) возврат такого же Err(e), то обработчики работают, но уже компилятор требует возвращать из метода io::Error и не даёт вернуть моё значение. Если делаю нужный Err для возврата из метода, то обработчики ругаются на то что я им Future подсовываю вместо нужного типа. Как фиксить? Нагуглить не смог как обрабатывать ошибки и возвращать значения, везде примеры только с чем-то одним и оно естественно без проблем работает.
>>1527873Делаешь enum MyErrors {}, и возвращаешь ошибки через него. что-то вродеenum MyErrors {IOError(huytd::io::Error),SomeOtherError(other::error::Type),SomeOtherErrorTwo(foo::bar::Error),}Но может тебе и не подойдёт такое решения, я не ебу, что у тебя там в коде сделать надо.
>>1527875Так и не понял куда твой enum пришить можно. Вот что значит иметь VS Code вместо IDE. Каким-то адским брутфорсом смог попасть в нужные типы и оно собралось. Вот такое говно я пытался сваять - https://repl.it/repls/ButteryWorseRuntimeenvironment
>>1527906К пизде. Когда тебе надо несколько разных типов в одно место передать, но как один тип — суёшь их в один енум, а потом на месте разворачиваешь матчем по типуif let Err(foo) {match foo {IOError(bar) => obrabotat_ioerr(bar),SomeOtherError(bar) => obrabotat_soe(bar),_ => generic_error(),}
>>1527909Но ведь это надо где-то рядом собирать в enum это говно и тащить до match. Разве это не костыли? Вот у меня есть вложенный обработчик внутри другого, мне надо здесь и сейчас обрабатывать ошибку не выходя никуда из него.
>>1527918Если ты не можешь возвращать один и тот же тип из обработчика, то не костыль. А если можешь, но почему-то не возвращаешь, то да, костыль.
>>1527361Любые, потому что системный язык с ансейфом. Но как обычно — если у тебя есть камень, то забить гвоздь или сделать молоток можно, но долго. Но можно. Так и с растом, собственно. Он удобнее, чем руками писать нолики, единички и goto, даже удобнее С, но он — не питон, поэтому программа, которая считает 1+1 на расте пишется дольше, чем на питоне. А вот если тебе нужна программа, которая считает 1+1 на голом железе без ОС, или ты планируешь вкатываться в 3D гейдев, то тут питон можно выбрасывать. Молотком забивают гвозди, но из него не сделаешь пилу.
>>1528640> программа, которая считает 1+1 на расте пишется дольше, чем на питонеНо ведь это не правда. Можно кинуть две палки и посчитать как в калькуляторе без лишних символов.
>>1528659Правда. В питоне ты сразу пишешьprint(1+1)А в расте тебе ещё мейнить надо:fn main() { println!(1+1) }
>>1528695Так в питоне тоже надо явно точку входа прописывать. Весь этот огород с if __name__ == "__main__"А в Расте ты пропустил форматирование, надо println!("{}", 1 + 1)
>>1528756У меня интерпретатор одинокий файл кушает без точки входа. И я вспомнил про форматирование, но уже лень поправлять было, один хуй в питоне конечный автомат быстрее пишется.
>>1528773А, тут я проебался, да. Ну, вот и дошли до точки, где с питоном начинается ебля — компиляция. Можно ещё вспомнить отсутствие многопоточности в самом питоне и кучу других минусов по сравнению с растом, но смысл и так понятен.В любом случае, раст учится дольше питона, и 999999999999999999999999999999999 * 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999090909090909090909090909090909980898980898989880898080808080808080808089898989898989898989898989898989898989898989ты в расте не умножишь прямо из коробки. Подключить BigInt либу не проблема, конечно, но не вижу смысла спорить, всё равно язык от задач выбираешь. Это если пять лет на расте код пишешь, тебе уже похуй, что на нём писать, ты и так всё можешь и знаешь.
>>1528786>Можно ещё вспомнить отсутствие многопоточности в самом питоне и кучу других минусов по сравнению с растом, но смысл и так понятен.Тут-то навыки системного программирования и нужны. Если бы я не знал о существовании memory mapped файлов, то-то бы я охуел с мультипроцессингом в питоне
Аноны, как можно пройтись по элементам и их индексузнаю что есть for (index, el) in vec.iter().enumerate(), но в таком случае я буду только брать референс, и если надо переместить это все в другой вектор мне нужно его полностью клонировать, без итератора вроде я сую только разметку.может конечно я обосрался, что произойдет если я .to_owned() на вектор применю, а потом закину в друоой вектор? он полностью склонируется или только оглавление? и что случится в дальнейшем с элементом, на который ссылается этот референс?
>>1529697.to_owned() нихуя не помогает, просто нагло клонирует содержание вектора[https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=380e5546a0bc68235f7c433d6e6b60c1mailto:]
>>1529701https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=380e5546a0bc68235f7c433d6e6b60c1
>>1529697Нихуя не понял, что тебе надо сделать, но если у тебя есть индекс, и надо переместить кусок вектора куда-то, то для одного элемента есть всякие Vec.remove(index) (swap_remove намного быстрее, но если после каждого ремува ты просто делаешь remove_count += 1; remove(next_index - remove_count), то у свап-ремува там посложнее с индексовой математикой, и свап-ремув не сохраняет порядок вектора; но он безусловно быстрее) .Для некоторой последовательности основная вытягивалка — это Vec.drain(index..other_index). Ещё посмотри методы слайсов, которые на странице вектора есть, там куча полезных, может есть и нужный тебе.И изменять вектор в тот момент, когда ты пиздуешь по нему итератором — плохая идея. Сперва вычисли нужные тебе индексы, потом уже по ним работай.Если брать твой пример, то я бы его превратил в такое:https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=0aa3e60327bfca518e78d9ab5bf54f86>>1529786Ну, или так, если у тебя вся сортировка в фильтр влезет, а все операции в map.
Что за говно с зависимостями у карго? Какого хуя нельзя токио 0.2 и реквест использовать вместе? Причем если я не прописываю features = ["full"] у токио, то всё работает и он выкачивает 0.1.22 для реквеста и 0.2 для меня. А с full пиздит что нет нужных зависимостей. Пиздец какой-то. Как эти шарады разгадывать?
>>1530553Я вот не могу понять, в чем сложность компилить нужные зависимости под крейты, а для меня те что я указал? Тут же нет никаких конфликтов, через use работают только из моих зависимостей имена, у крейтов свои зависимости. Это ебень какая-то. Вот как мне последние релизные версии tokio и reqwest использовать? А никак, блять. Есть альфа reqwest 0.10, но там tokio в зависимостях =0.2.0-alpha.6 . И даже если я прописываю эти альфы, то нихуя не работает, он почему-то тянет имена из 0.1.22 мне в код. Как же горит.
>>1531770git clone && cargo run crago update && cargo runВыплевывает пикрилВручную гуглил дерево депсов и допердолился до обновления scraper до 0.10.1 , лолЯ дебил и это можно было исправить одной командой?
>>1531855>пофиксил зависимости 30 минут назад.Так про них и пишу Я не знал, что upgrade в третегруппных пакетах; теперь разобрался
>>1456440 (OP)Поясните за ваше говно для системника и дрочера на параллельки-перформанс: 1) насколько легко ВОЙТИ? 2) как там с флагами компиляции, ифдефами-ифндефами-дефайнами?3) Насколько легко биндить с плюсами и какой оверхед? (например, хочу циклически вызывать плюсовой код с куда/опенсиэль кернелами)4) (необязательный, но интересный пункт) возможно ли интегрирование в существующие сишные и/или плюсовые проекты для нового кода, без рерайта старого, и какие для этого костыли будут, и как там с мейкфайлами?
>>15321791. Нелегко, особенно если сразу пытаться дрочить параллельность/асинхронность. Но конпелятор отзывчивый, многое подсказывает.2. https://doc.rust-lang.org/1.30.0/book/first-edition/conditional-compilation.html3. Оверхеда никакого, гугли rust ffi4. Хуй его знает. Я в андроидный проект интегрировал норм. Но тут лучше сразу всё на раст переписать, так как при тесной интеграции с ffi ты проебёшь безопасность, которая с сишными указателями в расте не работает.смысл то как раз в том, что когда у тебя есть ебически большой проект, то там и начинаются проблемы с одновременным доступом к памяти, освободил - не освободил, ой, где-то потекло. А писать маленький кусок на расте, ну ты на и си его напишешь - никакой разницы. Разве что раст сахарнее.
>>1532179>Насколько легко биндить с плюсами и какой оверхед?Через нужно определять плюсовые функции через extern "C", в остальном бесплатно.
захотел я функциональщины, почитал хачкель, симпатично но слишком академично, ерланг нахер, решил потрогать ваш руст, я сильно от него охуею как ссаный скриптер
>>1533541Начнём с того, что нормального системного ЯП до раста не было. Ассемблер, С, кресты — всё это писалось не для людей, совсем не для людей. И раст, будучи системным императивным языком, действительно сильно отличается от крестов. А функциональщине детей не учат, почему-то.
>>1533586Легионерам тоже сразу давали стальные мечи, вместо того чтобы сперва отпиздить рекрутов деревянными?
Аноны, никак не могу въехать вhttps://doc.rust-lang.org/std/pin/какое минимально шаманство нужно, чтобы припиннить структуру? Только в Box::pin, иначе никак? Гемор какой-то. А почему просто добавление поля_pin: PhantomPinnedне спасает?
>>1533413Есть несколько семейств языков на выбор. В порядке возрастания сложности: Лиспы (Racket или другие диалекты Scheme, Clojure, Common Lisp, etc), ML-семейство (Standard ML, OCaml, F#, Haskell, etc), ну и Erlang/Elixir.Мой топ это: Диалекты Scheme, Clojure, Standard ML, F#, и в последнюю очередь Elixir.
>>1534320А нахуя тебе пин без самого пина? Ну, то есть, можно тупо сунуть фантом пин в структуру, но в чём смысл?
>>1534568>Лисп лютое байтоебство Чиво? Лисп самый высокоуровневый язык за всю историю. Думать надо прежде чем писать.
>>1534913Rustonomicon, The Book, Rust by example, Reference; а также Rustc book, Cargo book, Embedded book, Rustdoc book и Unstable book идут в документах к стейбл расту. Я не знаю, что ты ещё хочешь. Путь вроде такого:Rust\.rustup\toolchains\stable-x86_64-pc-windows-gnu\share\doc\rust\html
Уже пишут бекенды на расте? Кто-нибудь из анонов писал? Хочу наконец перекатиться с го на серьезный язык, имею вес в конторе и могу протолкнуть интересные мне технологии в новые проекты.
>>1535600Я пишу. Вебня на rocket, и симуляции на amethyst.Еще пробовал seed-rs. Очень неплохо, но для фронта, конечно, пока что мало батареек.
>>1535600думаю тебе стоит подождать месяцок или два и закатиться на actix (можно щас, но там асинк/авейт не робит нормально, и еще нет асинхронных запросов к дб).рокет даже не пробуй, не асинка, не нормальных ответов, нихуя - сырое говно уровня шаблонайзера
>>1535887а вообще, довольно приятная вещь(актикс), можно актеры прямо в приложение пихать без всякой кронопараши и прочих нигройдных лайфхаков, скорость по сравнению со скриптами нереально быстрая, в хайлоаде тоже чувствует себя прилично
>>1535887>Не пиши код, подожди, пока нейронки не научатся писать его за тебя, тогда норм будет вкатываться.
>>1536293а ты загружай 25 10 500 постов + 25 10 500 * 8 атачментов в кэш каждые 30 секунд по запрочу юзера, слегка так ахуеешь (естесна это все в 2, ну максимум 3 запроса с последующей сортировкой на твоем япе)
>>1536398>order byоно и так лол, это говно все равно нужно заполнять в ебанный вектор в векторе ну ты понелVec<Thread, Post, Vec<Post>>Конечно на других япах это тоже можно, но на всяких пыхах и прочему эти действия займут куда больше времени I think и да, я знаю что другие япы умеют в with_capacity
>>1536408BTreeMap(Set) сразу используй, если тебе надо часто вставлять в середину или пересортировывать. Если только один раз надо отсортировать, то лучше собрать и отсортировать вектор, разумеется. И если ты хочешь туда-сюда ссылки на посты разбрасывать, то лучше делать это через id поста, а не объекты хранить. Что-то вроде такого:use u128 as PostId;struct Post {id: PostIdanswers: Vec<PostId>,data: Box<TextAndImages>,}Хотя может быть, эффективнее было бы хранить idшники в качестве ассоциативных указателей:let thread = HashMap<PostId, Post>struct Post {answers: Vec<PostId>,data: Box<TextAndImages>,}
>>1536408Да ты пили, пили, оно полезно.Но вообще, почему в вебе взлетело скриптоговно - как раз потому, что вся работа для кода там, это гонять данные из/в БД. Если код и тормозит, то обычно в тех случаях, когда мудила-прогер не осилил SQL и сперва выгребает всё содержимое БД, а уж потом скриптом делает выборку.
>>1536424Я так и делал, до того момента, пока не не понадобилось индексировать борды по шорт кеям, перешел на костыль (внешняя либа) multimap, увы оптимизация в минус сразу ушла, да, кто то скажет мол у тебя шорт может внутри лежать (НО оно сука лежит мутексе, по этому увы все так), может есть btreemultimap?>>1536482> сперва выгребает всё содержимое БД, а уж потом скриптом делает выборку.так и храню кэш хули
>>1476369Ох какое мы ленивое нежное говно. Чтобы оставаться на плаву и продолжать получать 5000кк в секунду нужно в месяц как минимум на два доклада материала по новым технологиям изучать (и понимать с первого же взгляда), потому что уже как минимум каждые полгода появляется новая актуальная технология, или подход прием к этой же.
>>1476535Кто провалился, ты провалился, епта.Хайпецкий на рынке труда нефиговый, сейчас весь хайлоад, где не хватает усатых усачей - обоСсанов/крестовиков в оргазме от раста, трейдинг, криптобиржи, криптовалюты, высокочастотный й трейдинг, бабки, бабки, бабки, вот это всё.
>>1536512>индексировать борды по шорт кеямЧто, это значит? Что такое "шорт кей" и зачем тебе индексировать борды по его значению?Я бы просто продолжал пихать айдишники:use String as BoardName;let all_boards: HashMap<BoardName, ImageBoard>;use String as SectionName;struct ImageBoard {sections: Hashmap<SectionName, Section>,};use u32 as ThreadId;struct Section {banners_adverts_and_everything: DiscBox<Data>,thread_id_pool: bit_set::BitSet,// Если раздел без тредов, вроде главной или пасскодной, то None.threads: Option<nohash_hasher::IntMap<ThreadId, Thread>>,}use u32 as PostId;struct Thread {posts: nohash_hasher::IntMap<PostId, Post>;}struct Post {answers: Vec<PostId>,data: DiscBox<TextAndImages>,}enum DiscBox<T> {NotDownloaded { data_url: String },Cached(Box<T>),OnDisc { path: String },}Строки часто можно сильно сократить по объёму, потому что многие части повторяются, и их можно просто матчить и format! по типу:let first = match x {0 => (),2 => "2ch.hk/",};let second = match y {0 => (),1 => "pr/",2 => "b/",};return format!("{}{}", first, second)А, например, номер треда из url двача можно превратить в число и хранить в u32 (u64, u128, BigInt, лол), но так сразу я не напишу сокращалку.
>>1536512>так и храню кэш хули Охх, попробуй подтюнить БД сервер, сириусли, не изобретай велосипед.Я кады на хостинге работал, помню решал клиентам проблемы тупым увеличением кешей в my.cnf в 10-100 раз. Потом заебался и сделал автотюнинг на основе тарифа при развёртывании шаблона.
>>1536969Ну и каким образом бистро работающий код ускорит твой хуйлод? Ты вообще понимаешь какие там вообще проблемы и как они решаются? В 95% случаев перформанс упирается в доступ в базу/хранилище и в запросы к другим сервисам, в остальных случаях в эзернет. От того что твой код быстрее байтики переставляет толком ничего не изменится.
>>1536969Что, простите? Ну да, у го будет латенси 1.2 мс, а у раста 1.17? Раскрой свой ответ поподробнее плз.
>>1537276бля 25 лет уже прошло, а жабаговно так и не выдавили из ИНДУСтрии... и оно еще смеет шевелиться там, результаты какие-то показывать. ХРРРРТЬФУ
>>1537278на жабе весь бизнес стоит, даже если внезапно закрыть все текущие разработки работы по одному поддержанию хватит на десяток лет впереджаба это такой здоровенный монстр а остальные языки карланы по сравнению, опять же котлины, спринги и тд, жаба по факту перерождается в них в новой обертке
>>1537276А ну-ка пруфы в студию. И я тебе в ответ не один такой же маняграфик скину, где го выше жявы.
>>1537276На Ноде можно выжать не хуже JVM, Rust, Go. У чувака миллион вебсокет-соединений. При этом загрузка процессора не больше 2%, а памяти жрет всего 500 Мб. За один час прогналось 120 миллионов вебсокет-сообщений!!!https://medium.com/@alexhultman/millions-of-active-websockets-with-node-js-7dc575746a01
>>1537608JS может быть быстрее Go.Всегда ли Node.js будет медленнее, чем Golang?https://habr.com/ru/company/ruvds/blog/439976/
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ae747457489543383d5fc43775bee48cКак передать None в bar без вспомогательной переменной?
>>1537589>>1537621Какая же наглая брехня в стиле медиа-манипуляторов. На JS в uWS написан только интерфейс. Так что нода не быстрее го. А вот C и C++ быстрее го, согласен.Однопоточный эвентлуп типа JS может быть близким по скорости к языкам типа го только в некоторых ситуациях. В задачах с concurrency го показывает себя отлично и явно лучше него по скорости наверное только раст и кресты. Остальные либо примерно схожи (clojure, scala, erlang, про языки типа шарпа и джавы не в курсе), либо вообще не могут конкурировать, как JS.
>>1537905>На JS в uWS написан только интерфейс.На C/C++ написан только ввод/вывод. На минуточку, нода тоже написана на C++. И в нее можно встраивать аддоны на C++.>Однопоточный эвентлуп типа JS может быть близким по скорости к языкам типа го только в некоторых ситуациях.OCaml в один поток может уделать Go. И в ноде уже есть многопоточность.>В задачах с concurrency го показывает себя отлично и явно лучше него по скорости наверное только раст и кресты.Не только. .NET Core не хуже как минимум, он сейчас обходит Джаву, и развитие продолжается. А вот в Go оптимизировать думаю уже некуда. Про Erlang думаю и говорить не нужно, у него лучшая конкурентность из коробки. И еще можно насчитать пяток платформ, если не больше.>либо вообще не могут конкурировать, как JSЭто ложь, что уже доказали. И это только начало. V8 быстрее Go, нужно только правильно использовать этот движок. Нода написана не очень с точки зрения производительности. Вот чувак запилил легковесное IO, и результат впечатляющий. кстати он писал что-то и для Go, вроде либу для сериализации, которая в 10 раз быстрее чем стандартная.
>>1537905>Остальные либо примерно схожиMLton в некоторых случаях (большая кодовая база) уделывает C/C++. Вот и еще одна платформа.
>>1537906>в ноде уже есть многопоточность.О чём ты говоришь? Нет там многопоточности. Ты про кластеры? Это совсем не многопоточность.>Не только. .NET Core не хуже как минимум, он сейчас обходит Джаву, и развитие продолжается. А вот в Go оптимизировать думаю уже некуда. Про Erlang думаю и говорить не нужно, у него лучшая конкурентность из коробки. И еще можно насчитать пяток платформ, если не больше.Про erlang я упомянул. И не сказал бы, что он явно лучше. Дотнет по бенчмаркам на уровне.>Это ложь, что уже доказали. И это только начало. V8 быстрее GoСорян, но это толсто. Где доказали? Этот пруф с uWS не пруф. Ты сможешь наспавнить в V8 миллион lightweight threads, у каждого из которых размер стека начинается с 2 килобайт? Нет.
>>1538442>Нет там многопоточности.Уже есть. https://tproger.ru/translations/guide-to-threads-in-node-js/>Этот пруф с uWS не пруф.У тебя подгорает от того, что оказывается Нода может быть по производительности не хуже, а иногда и лучше Go. Главная фишка не в Ноде, ее можно вообще выбросить, и написать другую обвязку. Райан Даль кстати недавно анонсировал новую Ноду, - Дино, которую сделал очень похожей на Го. Не знаю как там по тестам, думаю она быстрее Ноды.Главная фишка производительности JS это V8. Нода это только iO. Так вот Нода написана не очень, поэтому выступает бутылочным горлышком. Если ее переписать нормально, то производительность будет отличная. Чувак взял и написал свою обвязку, в чем проблема? Все равно всю работу делает V8, а код пишется на JS. Если затюнить движок, убрать все лишнее, то JS может работать быстрее чем C++. >Ты сможешь наспавнить в V8 миллион lightweight threads, у каждого из которых размер стека начинается с 2 килобайт? Нет. И че, это для JS вообще не нужно. js и в один поток может быть на уровне. А теперь есть и многопоточность.Сколько миллионов тредов ты сможешь сделать на Го? Эрланг может на одной ноде создать более 100 миллионов изолированных процессов! Го такое не под силу.
Блять что за uWS?Только начал переписывать свое говно с инвалидной сокетио на руст а тут уже даже жс бинды на этой куйне обгоняютМейнстрим бэк либа для Restа все-таки Rocket? Погуглил всякие Tide-ы но они какие-то сомнительные и в мейнтенерах соевые активисты
>>1538481> Уже есть. https://tproger.ru/translations/guide-to-threads-in-node-js/> Сравнивает воркер с горутинами / акторамиТвой уровень понимания ясен.> У тебя подгорает от того, что оказывается Нода может быть по производительности не хуже, а иногда и лучше GoНе подгорает, ведь нода не быстрее го.>JS может работать быстрее чем C++Сделал мой день.> И че, это для JS вообще не нужноНу да, когда не можешь что-то сделать, скажи что тебе это не нужно.> Сколько миллионов тредов ты сможешь сделать на Го? Эрланг может на одной ноде создать более 100 миллионов изолированных процессов! Го такое не под силу.На одном и том же железе примерно одинаковое количество, может совсем немного больше. При этом эрланг/эликсир нагрузит cpu в пару раз сильнее и задержка будет выше. Но я не говорю, что эрланг/эликсир абсолютно хуже. Я любитель и эликсира, и го, и раста.Ты можешь продолжать копротивляеться, но это не поменяет следующего факта: то, что делает uWS такими быстрым, написано на C++. И в будущем скорее всего будет подобная реализация на расте. Если честно, я даже не совсем понимаю, зачем ты так копротивляеться за жс. Разве что потроллировать.
>>1538833>Не подгорает, ведь нода не быстрее го.>Сделал мой день.https://blog.mozilla.org/javascript/2013/08/01/staring-at-the-sun-dalvik-vs-spidermonkey/http://ffp4g1ylyit3jdyti1hqcvtb-wpengine.netdna-ssl.com/javascript/files/2013/08/Dalvik-vs-ASM-vs-Native-vs-JS.pngТам в конце есть ссылка на эту картинку, кинул на случай если не заметишь. В трех задачах из семи JS быстрее C++, в одной на таком же уровне.
>>1538833>Ну да, когда не можешь что-то сделать, скажи что тебе это не нужно.>Твой уровень понимания ясен.>Сравнивает горутины с евентлупомТвой уровень ясен. В JS не нужны потоки, потому что есть эффективный евентлуп. И акторы как раз можно сравнивать с горутинами, потому что это два вида конкурентности.>На одном и том же железе примерно одинаковое количество, может совсем немного больше.Кого ты лечишь?! В Go 100 миллионов горутин на одной машине не создашь, если и создашь будет дикий оверхед. В Эрланге это возможно.>Ты можешь продолжать копротивляеться, но это не поменяет следующего факта: то, что делает uWS такими быстрым, написано на C++.И? Это не меняет того факта, что C++ компилируется в машинный код. Можно написать движок JS без C++ не менее, а может и более эффективно. MLton написан на самом себе (Standard ML), и как я уже говорил, для сложных задач бывает быстрее C/C++, как и OCaml.
>>1538844Там сам автор говорит, что>SunSpider-specific optimizations, ironically, make SunSpider a poor benchmark for talking about plain Javascript performance.Так что зелёную полосу на графике можно не принимать во внимание. Asm.js тоже далёк от 99% js-кода.>>1538846>акторы как раз можно сравнивать с горутинами, потому что это два вида конкурентностиА я что, говорил обратное? Я говорил, что нельзя сравнивать воркер треды с горутинами либо с акторами, а ты этим как раз и занимаешься.>В JS не нужны потоки, потому что есть эффективный евентлупЗавязывай толстить глупостью.>Кого ты лечишь?! В Go 100 миллионов горутин на одной машине не создашь, если и создашь будет дикий оверхед. В Эрланге это возможно.Тебя, болезного. Ок, не на "немного больше", как я сказал, но и далеко-далеко не колоссальная разница. Вот исследование. На одной машине запускали Scala/Akka, Go и Erlang. http://eprints.bournemouth.ac.uk/30239/1/sac-18.pdf>Scala/Akka can support the largest number of processes: ∼11MУ erlang 9, у го 3. Только это нереалистичный кейс и скейлить по другим машинам можно всех троих. Ну и когда потребуется совсем много, реально 100 миллионов, как ты сказал, возьмут скорее всего erlang/elixir, поскольку для такого он и был создан. Но и ресурсов ему понадобится весьма много. Тестилось ещё время спавна, на реальных 100к тредах го быстрее других спавнит, да и в остальных тестах он хорошо себя показывает. Ну и в самом важном и тесте го показал себя прекрасно, второй пик. Как раз основная задача - передача сообщений.В этом бенчмарке https://stressgrid.com/blog/benchmarking_go_vs_node_vs_elixir/ го нигде не показал себя хуже эликсира, а в одном из тестов эликсир показал себя хуже (сожрал весь cpu). Ну и нода знатно соснула у обоих.Тут у ноды хорошо только с потреблением памяти, лол https://hashrocket.com/blog/posts/websocket-shootoutТут разница в латенси серьёзная (3 пик) https://hackernoon.com/aws-lambda-go-vs-node-js-performance-benchmark-1c8898341982Тут нода быстрее только в тех самых бинарных деревьях, как по ссылке первого анона https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/go-node.htmlЗдесь (один из самых популярных бенчмарков) го гораздно ближе к топу https://www.techempower.com/benchmarks/У го в районе 300к рпс, у ноды 100к.Есть и другие, но и так хватит.Я вообще не фанат бенчмарков, потому что бессмысленно сравнивать огрызок (ноду) с языками с реальным конкарренси. Просто там, где требуется реальный хайлоад конкарренси, ноду ни один нормальный инженер не возьмёт. Он возьмёт го/эликсир/скалу/жяву/шарп/кложу. Или кресты, если совсем лютый хайлоад. Да и в вычисления го так себе умеет, эликсир совсем хуёво, тут только кресты/раст.>И? Это не меняет...Это значит, что противопоставляя uWS и го, ты сравниваешь кресты и го, а не жс и го.
>>1538870>кресты, ко-ко-ко, нода, ко-ко-ко, Goвно, ко-ко-коВот это тебя подорвало. V8 все равно эффективней, как ты там не рви задницу. Даже в один поток может уделать Goвно. Если убрать всю шелуху, вроде самой Ноды и остального, и сравнивать перформанс рантайма, то V8 может уделать всех, что и подтверждают тесты. Там дофига оптимизаций, и есть JIT, поэтому он может быть быстрее нативного кода, особенно на больших кодовых базах. Ноду к твоему сведению, используют в очень нагруженных проектах, в США, Европе, Азии. Даже с учетом оверхеда самой Ноды против чистой виртуальной машины.
>>1538940Scala, Go, Elixir - скриптопараша? Ну я под спойлер всё спрячу, если тебе неприятно.>>1538936>V8 все равно эффективнейВ чём? В конкарренси - нет, как ты там не рви задницу.>Даже в один поток может уделать GoвноПруфов не будет, конечно.>V8 может уделать всехТолсто.Что-нибудь сможешь сказать по делу, кроме очередных мантр в стиле "ряяя, у тебя баттхёрт"?