Это копия, сохраненная 18 ноября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ИТТ мы можем объяснить базовые и продвинутые концепции языка, и программирования в целом, поможем вкатывающимся, подскажем что выбрать для веба, игр или, прости Абу, блокчейна.
https://www.rust-lang.org
Продолжение шапки: https://gist.github.com/TatriX/183c816f1346d418f969c4576c2b9b41
1.39 стейбл выходит 5 ноября по их словам. Но можно на найтли уже потыкать
седьмой ушёл в бамплимит
https://web.archive.org/web/20190801205410/https://2ch.hk/pr/res/1369496.html
>rust для системщины
системный, не значит для. Значит, что он наиболее близок к ос и железу. Например, использует системные потоки.
На Си тоже можно писать не только системщину, но мы же понимаем, что для прикладного ПО лучше всего подходят языки со сборщиком мусора.
>мы же понимаем
Вы - это кто? Да и чего уж там - сразу один жабаскрипт для всего прикладного.
Либо смотри в сторону другой архитектуры, типа ECS, либо смотри в сторону более функционального подхода, либо юзай interior mutability, Rc, Cell, Arc, Mutex, вот это все.
декодер, ресемплер
Нормальный язык возьми
Не используй ссылки, чтобы связывать между собой объекты. Заимствование - это строго для передачи аргументов в функции и для структур, которые живут сугубо на стеке. Для всего остального используй индексы в вектор или Rc. В особых случаях, когда ну прямо совсем-совсем критичен перформанс (перформанс с графовыми структурами, хех, мда), указатели.
>про получение ссылки на элемент структуры и вызов с &mut self с этой ссылкой а качестве параметра .
Есть причина, почему это не одна функция? Вытаскивать наружу кишки, а запихивать их же обратно - это как-то не по людски.
Вот со всеми этими боксами ещё больше геморроя. Матчить что-то в них , borrowck орет ещё больше. Хотя может опыта просто нет нормального, как писать все это дело.
>>465355
> Есть причина, почему это не одна функция? Вытаскивать наружу кишки, а запихивать их же обратно - это как-то не по людски.
А я и в одну функцию делал. Один хрен, в нее запихнешь, а в ней появляется еще одно мутабельное заимствование. Единственный воркэраунд нашел для этой штуки - это оборачивать такие переменные в RefCell и пропихивать его куда надо, но как-то больно уродливо получается. Ну да и что выше написал к нему же относится .
Аноны, кто-нить пробовал скрещивать раст и NDK? У меня такой проблем:
через MaybeUninit создаю пустую структуру
скармливаю NDK-шной функции
после assume_init с простыми полями структуры всё збс - данные читаются и вполне валидны, но вот при обращении к ссылочным полям выкидывает сегфолт.
То есть, то ли проблема при конвертации изначально сишного пойнтера в растовый, то ли при вызове что-то недоинициализировалось, то ли я заголовки криво сконвертил через bindgen, то ли ещё ебола какая.
Оставь в структуре сишный указатель и определи функцию, которая кастит указатель к с ссылке через разыменование. Ты не вызываешь мутабельные операции, используя немутабельные ссылки?
Попробовал, не помогло. Короч, было так: структура, а у ней внутри анонимный union с указателями. bindgen сделал внешний тип union и вставил поле с ним в структуру. В итоге помогло тупо засунуть указатели из этого union в исходную структуру.
Вообще, чё-т дохуя накопилось уже правок в сгенеренном bindgen-ом заголовке, хоть в гит его добавляй
Поясните фастом без особых подробностей о языке по хардкору.
Если заинтересует, хочу вкатиться. От С блевать уже тянет.
Что на нем можно писать? Системное по? Мобилку? Гуи? Веб?
Есть какие-то либы для облегчения жизни и менеджеры зависимостей?
Что там с платформозависимостью? Есть какие-то фатальные недостатки или жуткие изъебы языка?
Спасибо.
Мимо perl, С программист
>Что на нем можно писать? Системное по? Мобилку? Гуи? Веб?
Системщину и микросервисы да. Остальное пока в зачаточном состоянии. Ты можешь, например, подключить к проекту на Кутях растовую статическую либу через FFI, но работа с гуём из самого Раста пока только через всратые биндинги. Пилят какие-то штуки для фронтенда на ВАСМ.
>Есть какие-то либы для облегчения жизни и менеджеры зависимостей?
Есть встроенный cargo, пишешь в конфиг название пакета, скачиваешь мегабайт исходников и всё работает.
>Что там с платформозависимостью?
Более менее всё, где есть ЛЛВМ, поддерживается, но есть платформы второго и третьего класса. А так, люди, вроде бы и ОСи пишут, и диодами мигают.
>Есть какие-то фатальные недостатки или жуткие изъебы языка?
Если не считать изъебов с борроу-чекером и мов-семантикой, язык на порядок проще плюсов, да и, в каких-то отношениях, чего-то типа СиСярпа, особенно если не нужно трогать Ансейф. Замыкание - это просто структ с одной функцией, Фьючур - это просто конечный автомат, и т.п.
Спасибо. Думаю, стоит потратить недельки 2-3 на вкатывание, а там посмотрим как зайдет.
Особенно коммент D1plo1d доставляет.
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=cd58bb0b05ee422d7b4bc8618bceff75
код выглядит валидно, конпеляется, а работает - пиздос.
Где-то читал про контейнеры раста (не помню где), что в таких случаях (до сотни элементов) выгодней всего использовать вектор https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=fa287995b1bfdf41f29bcbcc90ed453b
и HashSet если больше.
Да, я про expect позже уже сам вспомнил. А тут что-то переклинило, помню, что вроде бы какой-то особый unwrap, а что конкретно - не помню - взял и наваял, а оно вон как.
А ведь то, что я сочинил, было бы даже лучше, если бы было признано идиоматичным и работало нормально.
https://play.rust-lang.org/?version=stable&mode=debug&
edition=2018&gist=f9103375a42eec79b0043584d35684b3
Да, вариант с 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
Короче, я ни хуя не понимаю, если это не ошибка разрабов языка, то что. Багулю завести, что-ль..
>результат будет другой
бля, туплю, результат будет тот же. Но вот вызывать замыкание в примере выше вообще не нужно было.
>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.
И вот так, шаг за шагом, наступая на грабли на каждой строчке, я таки напишу свой хэллоуворлд. Впрочем, я утрирую, не всё так плохо, конечно.
Вообще если у тебя проблемы с понимаем почему это так работает, тебе бы лучше SICP почитать.
unwrap_or это обычный метод, который на вход принимает значение. Поэтому параметр будет вычислен перед передачей. А раз у тебя там была паника, то она взорвет приложение.
Код вида foo.bar(panic!("pizda")) не вызет ведь вопросов?
>3 webm
А как так сделать?
Хочу вкатиться в раст и зачекать язык в целом, искал идей для мини проекта. То, что на вебмке очень хочется повторить но с другим ресурсом ест-но.
А ты свой код спиздил, или нашел этот метод документации? Потому что если ты читаешь описание до половины, у тебя в каком угодно языке будут проблемы, лол.
слишком эзотерическое говно
Спасибо тебе, анон.
extern "C" fn blabla () {}
и передать без задней мысли - сишный код это схавает? А то растовый-то конпеляется.
Ты уверен, что у тебя нет проблем с версией либы? Там из новых версий убрали GlobalRef::new(), может ещё какая-то херня с этой функцией была в разных версиях, до того как убрали.
Можно попробовать прописать полный путь: jni::objects::GlobalRef::new
Маловероятно, но вдруг это GlobalRef::new из какой-то другой либы?
А если нет, то пиздос, да.
Да, я видел, что убрали, откатился на последнюю, для которой дока написана - а там это. Видимо, потому и убрали, что такая свистопляска. Ну да я пока кастанул типы через as , конпелируется, правда, я пока это даже не пробовал запускать на живом ведроиде - наверняка куча ошибок повылазит.
Ты тоже жабу с растом скрещиваешь?
И, если вдруг, тоже под ведроид?
Лол, нет, просто стало интересно, почему такая хуета могла возникнуть, загуглил "GlobalRef::new rust", а мне выдало старую версию либы. Я посмотрел сорцы того, что мне выдало на
https://docs.rs/jni/0.5.3/jni/objects/struct.GlobalRef.html
Там вроде как не должно выпадать такой проблемы. Посмотрел ещё последнюю версию этой либы, но другие смотреть уже не полез, своих забот полно.
Привет, двач. Есть у кого на примете годный курс лекций по алгоритмам? Знаю, что библией алгоритмизации считается книга Кормэна(потом по нисходящей идут Дасгупта и Бхагарва, тоже знаю) и мне нравится её полнота, однако, формальный язык очень и очень отталкивает, не способствуя пониманию. Да и вообще, формат лекций мне как-то ближе, нежели просто чтение книги. В общем, какие требования? Полнота(речь не об N-полноте, лол) Кормэна в сочетании с интересным, не сухоформально рассказывающим преподом. А, да, и чтобы на русском(знаю, что охуел). Подскажите чего по сабжу?
Associated type constructors. Ну или Generic associated types, кому как нравится
В asio я могу заюзать например async_read(...), пихнув в callback shared_ptr с контекстом и потом вызывать это чтение дальше до тех пор, пока не произойдет какой-нибудь пиздец.
Посмотрел в tokio, ебать в рот, какой-то хуй обсасывает пример как клиентом подключиться - с фьючерсом, естественно, но там какое-то блокирующее дерьмо по итогу выходит в работа в полудуплексе. Есть нормальное чтиво для понимания как это дерьмо разгребать, а то меня по-маленьку этот ваш Rust начинает вымораживать со своими "выебонами".
>Generic associated types
https://github.com/rust-lang/rust/issues/44265
почитал RFC, но ни хуя не понял. В nightly уже есть, но с багами.
крестотред
Я не спец, но могу посоветовать https://github.com/tokio-rs/tokio#example
если тебе в этом примере ничего не понятно, значит ты какой-то тупой покури ещё мануалы/попиши хэллоуворлды.
Кресты, конечно.
Двачую кресты. Сначала наступишь на все крестовые грабли, зато потом, перейдя на раст, не будешь ругаться на борроучекер.
На каком курсе?
Если на младших, то у тебя есть время, и лучше поебись с С. Полезнее будет.
Если на старших и уже поджимает искать первую работу, не трать время, лучше C#/Java.
К расту вернёшься, когда износишь пятый свитер и отрастить бороду.
Давно не интересовался этим перспективным языком. Скажите, нечитаемые неинтуитивные сообщения компилятора уже пофиксили?
>язык виноват
Это вопрос для долгой дискуссии. Однако, могу назвать сходу 3 возражения:
1. Лучше учиться правильно управлять памятью на ошибках конпелятора, чем рантайма.
2. Ты не всегда можешь знать наверняка, что с твоими данными сделает сторонняя либа. Каждый раз лазить в исходники? Ну нафик. А раст тебе сразу скажет, что сторонний крейт хочет то и это, поэтому обеспечь, пжалста, вот это.
3. Я не зумер и всю жизнь избегал сей с плюсами ровно потому, что мне бы програмить, а не о подводных камнях думать. Раст тут думает за меня
>Лучше учиться правильно управлять памятью на ошибках конпелятора, чем рантайма
Задумка годная и намерения благие, а как на деле? Вот например есть Standard ML с математически доказанной безопасностью. Почему мне стоит выбрать Rust а не его?
Как минимум потому что crates.io
Это как гвидон vs руби. Как бы ни был второй прогрессивнее, но первый выбирают из-за батареек. Так и с растом - он уже взлетел, есть куча батареек и мануалов, отзывчивое коммьюнити, это вот всё. Даже если появится что-то в теории лучше, на практике все, кому нужна безопасная работа с памятью без сборки мусора - уже на расте.
Не стоит вопрос что учить. Язык учится в процессе разработки программы.
Стоит вопрос на чём эффективнее писать софт. Неверно принятое решение может потом дорого стоить.
Т.е. вопрос сводится к: в каких случаях в 2019-2020 лучше взять Rust, чем C++.
При этом для простоты можно допустить, что пишем новый код с нуля и можем использовать любые последние версии инструментов.
Здесь сразу возникает куча дополнительных критериев: сколько человек будет в команде, на какой срок рассчитан проект, предметная область и т.д.
Допустим, у нас какая-нибудь числодробилка, т.е. нужна максимальная производительность на конкретном железе. Команда 5-10 человек, срок разработки 2-5 лет.
Попытаемся сравнить.
C++
+ куча готовых библиотек отличного качества
− в языке куча подводных камней, всегда есть риск облажаться, особенно, если разработчик малоопытный
+ язык популярный, у заказчиков не возникнет вопросов, если вдруг кто захочет в код полезть
Rust
− библиотек гораздо меньше, многие сомнительного качества; да, можно подрубать по FFI, но это лишняя работа и трата времени (хотя возможно и не особо серьёзная в контексте проекта на несколько лет)
+ выстрелить себе в ногу гораздо сложнее
− выбор маргинального языка придётся обосновывать
По этим пунктам, что я привёл, плюсы опережают.
Первый и второй примерно уравновешивают друг друга, на мой взгляд, но третий опять склоняет чаши весов в пользу плюсов.
Язык мне нравится, он уже не настолько маргинальный, как звезда хайпа прошлых лет - Haskell, выглядит практичным, продуманным и удобным.
На нём уже пишут какой-то софт, та же мозилла (хотя и про хаскель можно то же самое сказать, и на нём писали немало).
Но всё равно не хватает по-моему до того, чтобы выбрать раст для решения практической задачи.
Здесь ему немного не повезло - плюсы начали активно развиваться и реализовали многие вкусные фичи. Не было бы C++11 и последующих стандартов, тогда бы Rust конечно выглядел шикарно, а так единственное серьёзное преимущество это что язык изначально сдизайнен грамотно.
Не стоит вопрос что учить. Язык учится в процессе разработки программы.
Стоит вопрос на чём эффективнее писать софт. Неверно принятое решение может потом дорого стоить.
Т.е. вопрос сводится к: в каких случаях в 2019-2020 лучше взять Rust, чем C++.
При этом для простоты можно допустить, что пишем новый код с нуля и можем использовать любые последние версии инструментов.
Здесь сразу возникает куча дополнительных критериев: сколько человек будет в команде, на какой срок рассчитан проект, предметная область и т.д.
Допустим, у нас какая-нибудь числодробилка, т.е. нужна максимальная производительность на конкретном железе. Команда 5-10 человек, срок разработки 2-5 лет.
Попытаемся сравнить.
C++
+ куча готовых библиотек отличного качества
− в языке куча подводных камней, всегда есть риск облажаться, особенно, если разработчик малоопытный
+ язык популярный, у заказчиков не возникнет вопросов, если вдруг кто захочет в код полезть
Rust
− библиотек гораздо меньше, многие сомнительного качества; да, можно подрубать по FFI, но это лишняя работа и трата времени (хотя возможно и не особо серьёзная в контексте проекта на несколько лет)
+ выстрелить себе в ногу гораздо сложнее
− выбор маргинального языка придётся обосновывать
По этим пунктам, что я привёл, плюсы опережают.
Первый и второй примерно уравновешивают друг друга, на мой взгляд, но третий опять склоняет чаши весов в пользу плюсов.
Язык мне нравится, он уже не настолько маргинальный, как звезда хайпа прошлых лет - Haskell, выглядит практичным, продуманным и удобным.
На нём уже пишут какой-то софт, та же мозилла (хотя и про хаскель можно то же самое сказать, и на нём писали немало).
Но всё равно не хватает по-моему до того, чтобы выбрать раст для решения практической задачи.
Здесь ему немного не повезло - плюсы начали активно развиваться и реализовали многие вкусные фичи. Не было бы C++11 и последующих стандартов, тогда бы Rust конечно выглядел шикарно, а так единственное серьёзное преимущество это что язык изначально сдизайнен грамотно.
>та же мозилла
А ещё гугл, Cloudflare и пейсбук - так что, вот прямо в данный момент, не маргинальный. Алсо, в твоём исходном условии
>какая-нибудь числодробилка
уже подразумевает некую изолированность от внешних библиотек, поэтому этот минус тоже в минус.
Что касается хачкеля, то ему решительно не хватило плюсов (пгостите за каламбур) - одного "сконпелировалось - значит будет работать правильно" оказалось недостаточно, чтобы переманить на него с жабы и питона - т.к. скорость разработки на хачкеле куда ниже. У раста же с этим проблем нет - скорость написания на нём примерно та же.
>А ещё гугл, Cloudflare и пейсбук
Пробуют на единичных проектах, не более. Зачастую это просто инициатива конкретной команды/разработчика. Если полазить по гитхаб-организациям этих компаний, там и более редкие языки можно найти. Например, OCaml.
Активнее всего продвигает мозилла, оно и понятно, остальные пока не так активны. Просто осторожный интерес.
>уже подразумевает некую изолированность от внешних библиотек
По большей части да, но мало кто вообще никакой внешний код не импортирует. Обычно будет хотя бы несколько библиотек. Или по крайней мере скопипащенные в свой проект исходники на си/плюсах.
А почему нет? У нас есть SO, растофорум на английском и куча книжек по расту. Зачем нам ещё на дваче тредак?
for teh lulz очевидно
Более того на реддите постоянно висит реклама от parity.io про вакансии на расте. В общем, было бы желание.
Мне бы вот в расеюшке. Переезжать не хочу, семья тут. А удаленка - это то ещё приключение. Зато на гошке вон даже в мухосранях вакансии есть. И мозгами шевелить не нужно , когда на ней что-то пишешь.
Ой нахер. Я после своего опыта на sdl2, попытался переписать свою одну игрулю на растишку и только поел говна. Все слишком сложно, передавать туда сюда игровые объекты внезапно стало трудно. Я вроде с растом где-то уже год вожусь, а когда начинаются проблемы с борровком и лайфтаймами, то все, ласты клею. В плюсах все те же махинации обстоят гораздо проще. Так что лучше так же , как и раньше на них писать и не страдать ерундой, выбирая БизАпАснаТь.
Нахуй твой soydit не нужен.
Мнение про "быдло" не разделяю, но сам переехал с семьей. Зависимость есть, брат жив.
И как жить потом со всеми Option<Rc<Refcell<..ещё какая-нибудь херня..>>>?
Превозмогать. Можно и без Rc, и без RefCell, на одних лайфтаймах выехать - если грамотно структуру приложения и данных выстроить. А если ты в тупую сишный код переписываешь, ну дак так оно и будет.
такую хуйню тебе писал когда сходил с ума изза пездеца по жизне спасибо за все люблю тебя респект до гроба
> specs
Знаю про эту штуку. Но я пытался свои плюсовые велосипеды переписать. Там у меня и компоненты сгруппированы в памяти. И индексы для них хорошие. Хотел чисто поглядеть, насколько похожа будет производительность. У спекса просто интересно бы ещё пробенчмаркать что-нибудь более-менее тяжёлое. Хотя оно наверное и не надо. Век уже не тот, чтобы игры оптимизировать
Собираюсь контрибьютить в графический менеджер redox и потом портануть его на линупс, потому что даже в модном mutter-wayland память корраптится, аноны радуются артефактам на экране, баги не фиксятся годами, а самому пофиксить нереально из-за конченной культуры разработки free desktop
начинай портировать, а там и законтрибьютишь
> всё можно, но на деле никто не будет
Хз, уже второе место работы подряд, где пишу на расте. Первое - блокчейны, сейчас - решение, связанное с ИБ.
Ну как не вышло, заебали задачи + заебала удаленка. Ща в офисе сижу, заебись.
Ты про qt/gtk? Они умеют в wayland, так что достаточно его поддержать в orbital. А может уже кто-то чисто под wayland написал DM и композитор на расте. Тогда еще проще
По "rust wayland" гуглится несколько проектов, насчёт WM не уверен, что есть что-то юзабельное. Как по мне, слишком масштабная задача, слишком много там внутри подводных камней, связанных с драйверами, тулкитами и прочим. Такое делать нужно сразу большой командой, имея кучу бабла, менеджмент, роадмапы и пиар.
Иначе будет очередной проект " Latest commit ab123cd 2 years ago".
Если бы я за такое брался, я бы делал что-то вроде юнити-7 поверх вяленого - так больше шансов получить пользовательскую базу. Но это такое моё имхо.
Сап. Как создать указатель на:
SystemTime::now().duration_since(UNIX_EPOCH).ok().expect(...)
Тип справедливо выводится, как
Duration, а не fn() -> Duration
Можно сделать указатель на:
SystemTime::now().duration_since
Но тогда все ровно каждый раз придётся обрабатывать Result. Писать врапер?
Мне нравится gnome 3 wayland в целом - шустро, красиво, относительно стабильно, так что цель - более стабильный mutter, можно даже кусочек от него. Но вообще ты прав, задача навскидку довольно большая. В любом случае как минимум получу реальный опыт rust-а
Че сделать-то хочешь? Залей пример на плейграунд.
Тебе замыкание нужно, что ли?
let func = || SystemTime::...;
https://doc.rust-lang.org/rust-by-example/fn/closures.html
https://tsar1997.blogspot.com/2019/10/blog-post_6.html
Высокохудожественный говно-анализ посредтвенного перевода. Детишки играют в испорченный телефон, ок.
Насколько ты готов слушать человека, который считает, что в Расте можно шарить между потоками только глобальные переменные?
"Если вас по телефону
Обозвали дураком
И не стали ждать ответа,
Бросив трубку на рычаг,
Наберите быстро номер
Из любых случайных цифр
И тому, кто снимет трубку,
Сообщите - сам дурак."
Долбоёбы были, есть и будут, тут ничего не поделаешь. Но нехуй тут всем доказывать, что ты тоже долбоёб. Окей, раст бесполезен, если ты уже пять десять пятнадцать лет хуяришь код на си или крестах. И что дальше? Проблему обезьян, которые хотят в скорость, но не могут в с(++), ака "я уже не чувствую ногу, дайте мне то, чем я не смогу в неё выстрелить", раст решил, а больше и не надо. Да, я ленивая мразь, которая хочет решать свои йоба-задачки без ебли и кучи UB, которые желательно все помнить. Но это мои йоба-задачки, хули ты тут вылез со своей пропагандой антипропаганды?
>пропагандой антипропаганды?
эм, скорее антипропагандой пропаганды. Да и, кстати, в примере, который они обсасывают, ясно же сказано, что чувак, типа, вообще не программист. Берёт сишечку и наступает на все возможные грабли, но в рантайме. А потом берёт раст и снова наступает, но уже при сборке.
Пиздец. Узколобый подумал, что обсирают его любимую сишечку, но основная мысль статьи на хабре была другая: хруст не даёт сделать хуйню. Дебил сагрился на побочку
А чего у тебя сублайм не зарегистрирован? Пират чтоль??
Вы похожи на христиан во времена римской империи, когда они были мелкой сектой.
Звучит как комплимент.
Мань, ну не бомби. И тебя тоже когда-нибудь возьмут.
Полгода назад сменил работу на финтехо-тимлида, и зовут уже раз в месяц в сраные криптобиржи и блокчейн-стартапы, при этом опыта на расте у меня не прибавилось.
Прост для ждунов/милдов на расте работы рили нет и хорошо, а у синьоров/лидов опыт нерелевантный описан.
Посмотрите на растовые вакухи, в тч из других стран (в том же this week in rust), поймите, что серьезные дяди на нем делают, и расставьте соответственно акценты в своей резюмехе. Понятно что фронтендера с 10лет опыта на джс не будут звать делать бэк на расте.
И да, не ищите растовакухи на хх. Линк и ангеллист - от туда меня в основном хантили, на индид говорят еще часто появляются, но я там не зареган. А лучше вообще ходить на митапчики типа @ruRust_msk , хоть узнаете, как докладчики работу нашли. Не забудьте напечатать себе визиток с крабиком лол
Кстати, я заметил что в раст пытаются перекатиться очень много дотнетчиков. С чем это может быть связано?
Алсо, сколько у тебя опыта работы?
Перекатится во что и ради чего. Хочешь клепать веб говно на расте?
> Кстати, я заметил что в раст пытаются перекатиться очень много дотнетчиков. С чем это может быть связано?
Хз, у меня другая статистика по совсем нерепрезентативной выборке (из бывших коллег и знакомых):
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 тимлидства.
>>504217
> Просто я сам дотнетчик, пилю всякое веб-говно, и хочу перекатиться
Попробуй сначала из крудо-формошлепства перекатиться в чистый бекенд с кафками-куберами-облаками-grpc'ми-числодробилками-хуйлоадом, или с текущим стеком вкатись в предметку, которую часто на расте пилят, типа сраного криптоблокчейна - будет гораздо легче найти работку на расте.
Для довольно узкой области, поэтому на всеобщность и очередного убийцу жабки/erlang/чего там еще не претендую. Раст мне понравился, потому что на нем можно без мозгоебли уровня крестов сделать то, что будет работать и работать будет быстро. К сожалению, скорее всего, буду реализовывать на си, потому что мне нужно часто вручную управлять памятью для реализации сборщика мусора да и вообще почти всего, что только возможно. Собственно, вопрос: целесообразно ли разрабатывать подобную систему на расте, если предполагается хитровыебанный алгоритм сборки мусора и если да, то как идиоматичнее обходиться с raw memory?
О, благодарю. Тут все то, что мне нужно.
Мда, так все просто делалось, а я через какую-то жопу память выделял.
>Раст мне понравился, потому что на нем можно без мозгоебли уровня крестов сделать то, что будет работать и работать будет быстро.
В низкоуровневых штуках которые ты собираешься писать он выебет тебе мозги ещё сильнее, лол. Хотя бы для рантайма, просто возьми C и не выёбывайся — точно напишешь быстрее.
Где-то год назад видел на сях либу, в которой реализовывались потоки уровня пользователя, причем преемптивные. Т.е., по истечении некоторого кванта времени в процесс посылался сигнал и происходило переключение исполняемой функции, с сохранением состояний регистров текущей функции в специально отведенный стек.
Вопрос следующий: как реализовать подобное на расте? Точнее, что можно почитать, чтобы стало понятно, как это реализовать, т.к. просто взять готовое слишком скучно, хочется понять, как оно сделано.
Ну вот я почитал книжку, которую мне вчера скинули, и понял, что у меня просто будет один огромный кусок unsafe-кода, так что проще на сях написать всю работу с потоками, исполнение байт-кода, jit-компиляцию, вот это все. И тогда закономерный вопрос -- а стоит ли тащить вторую технологию в стек?
Насколько я тебя понял, ты описал стейтфул корутины.
Собственно, гуглится на раз два https://github.com/Xudong-Huang/may , и реализация подсматривается там же. Ну либо в той либе на ц, если интересно именно изобрести велосипед на расте.
>>506013
>проще на сях написать всю работу с потоками
Если тебе нужно было бы привязывать к бинарнику рантайм, то да. Но если тебе таки нужно сделать вм — эээ, нет.
>исполнение байт-кода
https://github.com/RustPython/RustPython
9 ансейфов на целый интерпритатор питона.
>jit-компиляцию
https://github.com/nbp/holyjit
2 ансейфа.
Просто именно GC, где вся деятельность — это ходить по стеку и искать ссылки — будет одним большим ансейфом, да.
Есть ли смысл брать раст — если хочешь сделать на скорость, то нет. Если ты собираешься делать какую-то низкоуровенную хуйню, у которой повышенные требования к безопасности (например, если она торчит в сеть, как браузер) — то да.
Насколько я понял, то, что ты скинул (may) -- это все-таки инструмент для кооперативной, не преемптивной многозадачности.
Мне же интересно прерывать исполнение процесса извне, а не изнутри него.
Я занимаюсь арбузным бизнесом. У меня вызывает нейтральную реакцию rust и все, что с ним связано.
Бля. Знаешь, что. Пруфани арбузом и глубокими познаниями жабы. Сам я тоже сорт-оф жабист, но без погонов.
> пруфани арбузами
К счастью я еще не дошел до того, что выращиваю арбузы дома. Чем тебе пруфануть из хаты-то? Док-ты слать не хочу, ибо диванон.
> глубокими познаниями жабы
Ну, давай, нападай. Я периодически пилю свои проекты, так что не забыл почти.
Да что я тебе накидаю, всё же гуглится. Вот как у твоей нашей жавы с потокобезопасностью дела, какие преимущества перед плюсами? Вот расшарил ты, такой, List в кучу тредов и радуешься.
> pic related
Было время и я думал, что арбузы можно на дому хорошо растить.
> потокобезопасность
Писать потокобезопасные приложения на джаве, конечно, можно.
Неблокирующих алгоритмов предостаточно (List, Stack и бол-во java.util.concurrent) и вполне можно потому и радоваться.
Но на других языках, бесспорно, это часто проще.
> преимущества перед плюсами
Их тебе любой школьник назовет. Ну лан.
Я имел опыт работы с плюсами еще с времен Borland C++ Compiler, поэтому отвечу по житейски, что в джаве программировать в разы безопаснее и реже приходиться ебаться с дебаггером и смотреть, что за хуйня у тебя вылезла.
На джаве кодить проще, так как ты не задумываешь о выделении памяти, не думаешь о том, смаллочить один огромный кусок или по кускам, как собака, таскать. Ты не думаешь о том, когда тебе надо освободить кусок памяти.
На джаве кодить быстрее. У тебя есть вотакенная стандартная библиотека на все случаи жизни и ты не будешь делать очередную реализацию картошки с торчащими палочками.
На джаве МУЛЬТИПЛАТФОРМЕННЕЙ.
На джаве больше работы и меньше требований.
На джаве, иногда, бывает быстрее. Правда, это скорее из области фантастики, но JVM способна байт-код переводить наиболее оптимально в код платформы, откуда она вызвалась, таким образом, беря бремя платформенных оптимизазаций на себя.
Но сказать, что лучше, что хуже объективно, конечно, нельзя. Это разные инструменты под разные задачи, пусть они и иногда и пересекаются в рабочем поле.
Ебал в рот кресты и джаву, люблю си и ассемблер и мне похуй.
>реже приходиться ебаться с дебаггером
Да, да. Смотришь, а там concurrent modification exception прилетел, конкретно с какой строки и всё видать - красота. Но это в рантайме - может вылезти при отладке, а может и только в продакшене, как повезёт. Сама по себе жаба по-умолчанию позволяет наступать почти на все те же грабли, что и плюсы, только они у неё помягше. Ну, если ты сеньор, то ты, конечно, уже про все грабли знаешь и не наступишь.
А вот раст чем хорош - что он ещё на этапе компиляции отсекает все твои попытки пройтись по граблям. Понимаешь? Не надо быть сеньором, чтобы писать потокобезопасно - сам компилятор не даст тебе писать небезопасно. Это сильно упрощает и удешевляет разработку, снимая кучу головной боли.
Кроме этого, раст ещё и сахарный, почти как питон.
Как докатился до арбузов-то? Дядя - арбузный король оставил наследство?
>Как докатился до арбузов-то?
Отсидел за наёмничество. Скоро думаю заводить трактор, как срок давности пройдет. А вообще, на деле, арбузы не такая уж и плохая альтернатива программированию. Получаю хорошие деньги. В арбузах разбираться стал...
>А вот раст чем хорош - что он ещё на этапе компиляции отсекает все твои попытки пройтись по граблям.
Звучит прекрасно, но пройдет еще года два, думаю, пока программисты смогут это донести до заказчиков. Те, не смотря даже на примеры в цвете, как их продукт хуячиться в проде, не способны сделать вывод о необходимости завозить педеRUSTов.
> Сахарный
Вот, вот это вот хорошо. А то, помню, golang смотрел...
Так, значит, ты - торговец арбузами, в прошлом ява-сеньор, отсидевший за наёмничество как палестинский боевик..?
Не говори, а мы тут штаны просиживаем. Хотя, по арбузам можно было бы догадаться, что не ЦАХАЛ. Но я как-то решил, что было бы логично сперва работать жава-сеньором в кибуце, а потом пойти, соответственно, в ЦАХАЛ.
> по арбузам
А что тебе арбузы обо мне говорят? Ну, решил я ими заняться и что? Почему все доебываются до блядских арбузов? Если бы я скажу, то все думаю, что я серьезный перец, а как арбузы - сразу какое-то предвзятое отношение. Несправедливо.
> ЦАХАЛ
Если бы там был, то не пришлось бы сидеть.
Не знаю, как у вас, а у нас на рынке - что ни торговец арбузами, то с большой вероятностью, чисто внешне мусульманин.
Сколько и где сидел? Тюрьмы нормальные? За кого воевал (и зачем - ты же программист епта, можешь переехать в любую страну)? Не очень разбираюсь, че там у вас.
> А у нас на рынке - что ни торговец арбузами
У меня бизнес крутится в несколько другой плоскости. Я отвечаю, за организацию цепочки доставки с югов в регионы России, от Петербурга до Новосибирска. Я не занимаюсь курированием выращивания бахчевых культур.
А насчет этих уличных торговцев, могу сказать, что иногда думал заняться и этим, потому что часто они, несмотря на свой бомжеватый вид, гребут нормальные деньги. Я изучал этот вопрос и не мог понять, какого хуя они одеваются как бомжи, если получают такой титанический (для своей ниши) оборот. Вопрос, кстати, открытый.
>Арбузный бизнес, как и всякий плодово-овощной, в России имеет ярко выраженную сезонную окраску. Зато его рентабельность может достигать 60-100%. Главное - суметь быстро организовать цепочку доставки арбузов с юга России в Петербург.
охх, не знаю, может и меня заебёт однажды программировать и подамся организовывать цепочки поставок голубоглазых сибирских шлюх в Китай, тут близко
Потому что оборот != прибыль.
Это как в расте: язык есть, фичи есть, потокобезопасность есть — работы нет.
>Сколько и где сидел? Тюрьмы нормальные?
Тюрьмы - пиздец, в колонии было нормально. Так как были некоторые connections в ФСИН.
Сидел я недалеко от родной республики. Говорить где, точно не буду, сами уж понимаете. За меня смогли договориться с нужными людьми и я сидел в хороших условиях, имел доступ в интернет, получал нормальную пищу и не было в камере никаких урков. Сейчас, такое не прокатит уже (вне Кавказа точно), так как в 18 году один авторитет пропалился СМИ о том, что он на зоне икру с шашлыком хавает и СК да ФСИН все ужесточили да сжали яйки всем, кто такое практиковал.
Поэтому грешно мне жаловаться. Начал даже очень много читать на зоне, зона ушла - привычка осталась. Стал практиковать медитации отчего жить стало проще и чище.
Все сейчас идет на исправление. Через год планирую, вот, в Германию свалить.
> За кого воевал
Одно из крыльев ФАТХ за освобождение палестины.
> Зачем
Не понимал, что бороться с Израилем, пока штаты стоят за ним бесполезно.
Сайт очень годный и в одно время очень помог мне.
>голубоглазых сибирских шлюх в Китай, тут близко
Они сами находят свой путь. Время сутенеров медленно уходит вникуда и романтика нелегальных борделей тоже.
>>507878
Да в том то и дело, что там по подсчетам и прибыль нихуйская была. Или они за крышу много отдавали, или они являются тайными воротилами теневой экономики. Третьего не вижу.
> подамся организовывать цепочки поставок
Если интересно, то в свое время очень помогла эта книга
https://www.alpinabook.ru/catalog/book-5557/
>язык есть, фичи есть, потокобезопасность есть — работы нет.
Вангую, что через несколько лет работы будет много, если разработчики языка не уйдут в хаскельманду.
Если точка не согласована, могут снести. А чтобы не снесли, доставай монетку. Продавцу зарплату плати, если сам не продавец (а если сам, то умей общаться, торговаться и целый день каждый день стоять или сидеть на жаре), за бензин плати, грузчикам плати, налоги плати. Где тут прибыль-то? Да и зачем дорого одеваться, если потом всё равно всё расхуячишь соком, когда арбуз резать будешь?
>Да и зачем дорого одеваться
Я скорее про то, что они спят вместе с другими приезжими в бомжатниках.
А так ты верно все расписал про их издержки.
Рассказывайте, кто что пилит на расте?
Хуя себе история. Ты верующий, я правильно понял? Никогда еще не встречал верующих программистов. Ты исследовал коран? Видишь ли ты противоречия в нем? Как ты относишься к наличию разночтений у суннитов/шиитов и других направлений? Как ты относишься к тому, что все религии (и течения ислама) считают свое учение правильным, а все остальные - не совсем?
Тебе легко было решиться пойти воевать (с высоким шансом умереть), когда ты такой себе сеньер 300к/нс? На каком языке вы там говорили в Палестине? Какими были ребята, которые воевали с тобой, какое у них образование? Они воюют чисто за территории Палестины или там замешана религия? У тебя была военная подготовка или учили там на месте? Ты сидишь в /wm/?
Сейчас тебя беспокоит, что Израиль поступает несправедливо по отношению к Палестине? Как ты относишься к тому, что за 3000 лет территория современной Палестины захватывалась самыми разными народами: евреями, римлянами, арабами, османами, персами, греками, англичанами, немцами, французами и т.д. Так получилось, что последними были амеры с евреями. Почему важно, кто там сейчас управляет, ведь если пытаться опираться на историю, а не на текущее население Палестины, то и греки вполне могут претендовать на эти территории? Или причина конфликта в том, что евреи именно в наше время сильно прессуют арабское население в Палестине?
Есть ли у тебя знакомые евреи, которые являются хорошими людьми?
дебик, тебе бы историю подучить. До евреев на этой земле были только Кнааны, потом были евреи, коих силой изгнали оттуда и они 2000 лет шароебились по планете Земля и их прессовали по кд все кому не лень. Иерусалим в Торе упоминается свыше 150 раз, в Коране - ни разу (да-да, пошел нахуй, у меня знакомый аспирант востоковед и знает всю эту чепуху, лично я ссал на все эти религии плотной струей урины). Никакой палестины нет и не было никогда за всю историю всех народов, это все равно, блять, что утверждать, что ДНР - это полноценное государство и всегда существовало, лол. У нее никогда не было государства, она была подмандатная после первой мировой, сама земля в то время принадлежала вообще британцам. А палестинцам (на верный лад, филистимлянам) дали такую кликуху римляне, которые тоже были мимозавоевателями. Образование государства Израиль в 1948 году - не более, чем возвращение евреев на родину после изгнания длиною в 2000 лет.
Факт - за 70 лет евреи построили одно из самых развитых государств в мире (технологии, медицина, экономика на мировом уровне), а когда обоссаный конч Ариэль Шарон отдал Газу этим даунам, она из цветущих садов превратилась в чистилище ада буквально сразу. Про исковерканные толкования Корана начала 20ого века, где ВНЕЗАПНО появляется инфа, что Иерусалим вовсе не принадлежит евреям, это вообще рофл. В общем, собаки лают, караван идет.
мимонежид, бтв
>Факт - за 70 лет евреи построили одно из самых развитых государств в мире
А разве не американцы это сделали?
Я вообще не утверждал ничего, о чем ты бугуртишь. Палестина - это просто одно из названий той территории, из которого сразу понятно где это и что это. Не явлюяюсь фанатом евреев или арабов, я к этому конфликту никаким боком не отношусь, просто любопытно.
Почему ты так сгорел?
А разве американцы? По-твоему, союз == полное гособеспечение от А до Я? Тащемта, нет.
>>508050
Я тоже не имею к этому отношения, но арабы в современной истории причинили огромное количество страданий людям разных народов. Чем занимались евреи? Строили свою страну, разрабатывали новые технологии, продвигали науку вперед. Чем занимались муслимы? Аллахакбарились в метро, на улицах в толпах ни в чем неповинных людей, резали людей на улицах, насиловали женщин по всей Европе. Абсолютное большинство террористических организаций в мире состоит чуть менее, чем полностью из муслимов. Обобщать не хочется, ибо это очевидно, что не АБСОЛЮТНО каждый муслим в мире == террорист, но статистика энивей играет не в их пользу. Евреи - созидатели, муслимы - разрушители. Я уважаю евреев за то, что они, несмотря на гонения длиною в ТЫСЯЧИ лет, не исчезли с лица Земли, как народ, а восстали как Феникс из пепла, да еще и построили свое государство достойным образом. И я презираю большинство муслимов за то, что в современной истории они сеют смерть и ненависть. Это факт, с которым сложно спорить.
>Хуя себе история. Ты верующий, я правильно понял?
Сложно ответить.
>Никогда еще не встречал верующих программистов.
Лично я заметил, что многие ударяются в буддизм (не совсем религия, но религозно-философское).
>Ты исследовал коран?
Да, я из рода хафизов, поэтому меня с детства думали сделать муллой. Я с ранних лет читаю, пишу по-арабски, поэтому это для меня не проблема.
> Как ты относишься к тому, что все религии (и течения ислама) считают свое учение правильным, а все остальные - не совсем?
Ислам считает все авраамические религии правильными. Все христиане и иудеи - ахль аль-Китаб, то есть люди писания, которых нельзя оскорблять, посягать на их имущество. Они, как мусульмане, попадут в рай, только будут подвержены большим испытаниям, согласно Корану и Хадисам.
>Тебе легко было решиться пойти воевать (с высоким шансом умереть)
Это решение было результат запущенного уныния, которое овладело мною. В то время я очень больно реагировал на любую несправедливость. Сейчас же я понял, что ей полна вся земля, и лучше изменить свое отношение ко всему, чем весь мир.
>На каком языке вы там говорили в Палестине?
Ебанутый вид арабского.
>Какими были ребята, которые воевали с тобой, какое у них образование?
Это простые ребята. Многие из них потеряли братьев, сестер, отцов, матерей и друзей от руки Израиля. Среди них было несколько людей с высшим, но бол-во - без него.
>Они воюют чисто за территории Палестины или там замешана религия?
Скорее смесь всего. Когда на твоей земле враг, который не дает тебе свободно молиться на твоих святынях, который загоняет тебя, аки скот, в резервации, который запрещает тебе даже вести свободно хозяйство на своей земле, то вопросов у многих и не было.
>У тебя была военная подготовка или учили там на месте?
Учили на месте. Военная подготовка до этого была.
>Сейчас тебя беспокоит, что Израиль поступает несправедливо по отношению к Палестине?
Сейчас уже нет. Многое в руках самих мусульман. Если бы все мусульманские страны пламенно желали залететь (и при этом действовали грамотно, а не на горячую голову) с моджахедами в Эль-Акса, то это бы уже произошло.
>Или причина конфликта в том, что евреи именно в наше время сильно прессуют арабское население в Палестине?
Именно. Это самый настоящий апартеид. Но миру - похуй. Пусть щемат палестинцев, пусть щемат уйгуров. Все будут молчать пока в том есть выгода.
>Есть ли у тебя знакомые евреи, которые являются хорошими людьми?
Среди евреев много хороших людей.
>в Коране - ни разу
Да. Он упоминается в Хадисах.
>Образование государства Израиль в 1948 году - не более, чем возвращение евреев на родину после изгнания длиною в 2000 лет.
Этот тезис смешной. Может теперь ассирийцам ближневосточным всю Месопотамию подмять?
>Факт - за 70 лет евреи построили одно из самых развитых государств в мире
С них надо брать пример.
>она из цветущих садов превратилась в чистилище ада буквально сразу.
Как ты эти чистилища приберешь, если тебе Израильское Goverment почти не дает свободно вести предпринимательскую деятьельность под угрозой смерти?
>А разве не американцы это сделали?
Скорее немцы. Иронично.
>Почему ты так сгорел?
Потому что этот анон не держит себя в руках.
>но арабы в современной истории причинили огромное количество страданий людям разных народов
Я соглашусь. Им стоит вспомнить, то что во времена халифата все было наоборот.
>И я презираю большинство муслимов за то, что в современной истории они сеют смерть и ненависть.
Я не понимаю, зачем мусульмани идут на это, если в Коране чётко написано то, что их действия, терроризм и прочее - ебанный стыд и грех.
>Хуя себе история. Ты верующий, я правильно понял?
Сложно ответить.
>Никогда еще не встречал верующих программистов.
Лично я заметил, что многие ударяются в буддизм (не совсем религия, но религозно-философское).
>Ты исследовал коран?
Да, я из рода хафизов, поэтому меня с детства думали сделать муллой. Я с ранних лет читаю, пишу по-арабски, поэтому это для меня не проблема.
> Как ты относишься к тому, что все религии (и течения ислама) считают свое учение правильным, а все остальные - не совсем?
Ислам считает все авраамические религии правильными. Все христиане и иудеи - ахль аль-Китаб, то есть люди писания, которых нельзя оскорблять, посягать на их имущество. Они, как мусульмане, попадут в рай, только будут подвержены большим испытаниям, согласно Корану и Хадисам.
>Тебе легко было решиться пойти воевать (с высоким шансом умереть)
Это решение было результат запущенного уныния, которое овладело мною. В то время я очень больно реагировал на любую несправедливость. Сейчас же я понял, что ей полна вся земля, и лучше изменить свое отношение ко всему, чем весь мир.
>На каком языке вы там говорили в Палестине?
Ебанутый вид арабского.
>Какими были ребята, которые воевали с тобой, какое у них образование?
Это простые ребята. Многие из них потеряли братьев, сестер, отцов, матерей и друзей от руки Израиля. Среди них было несколько людей с высшим, но бол-во - без него.
>Они воюют чисто за территории Палестины или там замешана религия?
Скорее смесь всего. Когда на твоей земле враг, который не дает тебе свободно молиться на твоих святынях, который загоняет тебя, аки скот, в резервации, который запрещает тебе даже вести свободно хозяйство на своей земле, то вопросов у многих и не было.
>У тебя была военная подготовка или учили там на месте?
Учили на месте. Военная подготовка до этого была.
>Сейчас тебя беспокоит, что Израиль поступает несправедливо по отношению к Палестине?
Сейчас уже нет. Многое в руках самих мусульман. Если бы все мусульманские страны пламенно желали залететь (и при этом действовали грамотно, а не на горячую голову) с моджахедами в Эль-Акса, то это бы уже произошло.
>Или причина конфликта в том, что евреи именно в наше время сильно прессуют арабское население в Палестине?
Именно. Это самый настоящий апартеид. Но миру - похуй. Пусть щемат палестинцев, пусть щемат уйгуров. Все будут молчать пока в том есть выгода.
>Есть ли у тебя знакомые евреи, которые являются хорошими людьми?
Среди евреев много хороших людей.
>в Коране - ни разу
Да. Он упоминается в Хадисах.
>Образование государства Израиль в 1948 году - не более, чем возвращение евреев на родину после изгнания длиною в 2000 лет.
Этот тезис смешной. Может теперь ассирийцам ближневосточным всю Месопотамию подмять?
>Факт - за 70 лет евреи построили одно из самых развитых государств в мире
С них надо брать пример.
>она из цветущих садов превратилась в чистилище ада буквально сразу.
Как ты эти чистилища приберешь, если тебе Израильское Goverment почти не дает свободно вести предпринимательскую деятьельность под угрозой смерти?
>А разве не американцы это сделали?
Скорее немцы. Иронично.
>Почему ты так сгорел?
Потому что этот анон не держит себя в руках.
>но арабы в современной истории причинили огромное количество страданий людям разных народов
Я соглашусь. Им стоит вспомнить, то что во времена халифата все было наоборот.
>И я презираю большинство муслимов за то, что в современной истории они сеют смерть и ненависть.
Я не понимаю, зачем мусульмани идут на это, если в Коране чётко написано то, что их действия, терроризм и прочее - ебанный стыд и грех.
У меня в голове пока что плотно сидят 2 тезиса (я считаю это фактами)
1. Израиль будет сговорчивее, если в Палестине ко власти придёт партия, не ставящая своей целью уничтожение Израиля (сейчас там Хамас, он ставит, ФАТХ был миролюбивее - и с ним почти договорились)
2. Арабы (Саудовские и прочие) заинтересованы в том, чтобы Палестина была вечной кровоточащей раной - им это нужно для мобилизации собственного населения, для поддержания образа врага. Они то и поспособствовали смене ФАТХ на Хамас, так как мир им не выгоден.
Что касается помощи от США и проч: евреи, пусть на помощь США, пусть, организовали у себя государство первого мира с IT, медициной, фармакологией, кибуцами, космической программой и прочим. То есть, не сидят, сложа руки. Арабы, сидя на нефти, имея с неё гораздо больше, чем Израиль от США, только и делают, что пользуют Наташек и спонсируют "братьев" (в том числе некоторых жава-сеньоров) по всему миру. Рашка в этом плане не лучше, но это другой разговор.
Я про то, что если смыть Израиль в океан, то арабы не построят там ничего путного взамен, как не построили они в других странах (есть у них Дубай, но там ни черта не производят, это чисто мировой офис).
С тезисами я согласен. Евреи и арабы должны как-то научиться жить вместе (звучит смешно, но им придется). Только произойдет это даже позже чем раст станет мейнстримом.
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2ae3105a8629b440e1fd8cbe4de91fb5
что хочу: хочу 2 структуры чтобы одна (child) был вложена в другую (parent) и могла звать функции родителя. Можно такое провернуть без лишних изъёбов, на одном только Weak? Пробую, а всё никак: то, видите ли, parent owned, то ссылка lives not enough.
Нахуя ты в палестинотред это говно притащил? Пшел отсюда.
Создай парента через Rc<RefCell<>>, у Rc создай слабую ссылку.
Какую задачу ты решаешь? Скорее всего тебе такая ересь не нужна.
>Рассказывайте, кто что пилит на расте?
Движок для создания интерактивных карт для отображения истории Палестины.
Я считаю, что ты ведешь себя неподобающе и нарушаешь дискуссию, которую ведут тут добропорядочные аноны. Своими действиями ты позоришь себя и все, что ты с собой олицетворяешь. Я бы задумался и прекратил вести себя столь глупо и неуместно, дабы не пятнать своё достоинтсво подобными выходками.
>с собой олицетворяешь
>достоинтсво
>>509170
Просто трейты — это раст вей, ООП через ансейф — не раст вей. В сущности, какая тебе разница, выносить функции в трейт или в методы парента? Если там серьёзная разница в коде между методами парента и чайлда, то имплементишь отдельно. А если маленькая разница, то в функцию можно передать кложуру.
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=d1ef955bed15c42709ed95227940f74c
> Какую задачу ты решаешь? Скорее всего тебе такая ересь не нужна.
Анон прав.
А точно, че это мы все тут. Го на яве пилить софт.
Ещё Amethyst есть, хотя он сложный и пока не все мастхев фичи для игры есть.
Подскажите, что за прога в webm шапки
Типы, контроль за выделениями памяти. Куча ошибок детектится на этапе компиляции
Ватафак?
Наверное потому что если у тебя уже написан софт на си и ты открываешь вакансию, ты будешь искать того, кто будет писать на си?
Новые проекты и кампании довольно часто используют раст. Посмотри на те же крипту.
Но вообще, раст не только и не столько про системное программирование, сколько про безопасную и быструю альтернативу без гц.
Потому что 99% разработчиков не пишут браузеры и подобную хуйню где фичи раста нужны
Потому что для ядра он всё ещё жирный, а для плюсов слишком сложный как второй язык. А для простых утилит го проще и либы у него все есть. Вот где у раста что-то подобное go x/crypto/ssh?
Тебя не смущает что "простые утилиты" по факту пишутся либо на расте либо сразу на ноде, а не на го? ripgrep один чего стоит.
Ну я математику пишу например. Шаблоны крестовые очень заходят, а вот борроу чекер не пришей пизде рукав
Не смущает, ибо у меня обратный опыт. Щито поделать.jpeg
Взять хотя бы недавний https://github.com/neex/phuip-fpizdam - казалось бы питон идеален, но пок почму-то на го.
>>511956
Ну они ж пиздец. В d куда проще.
И чем питон идеален? Тем что для запуска тулзы у тебя в системе должен стоять питон? Нет спасибо.
Незнаю что за го-пхп хуйня по ссылке, но у меня есть альтернативный пример. Рискну предположить что количество людей которые пользуются vscode на порядк выше тех, кому нужен эксполит для пыхи. vscode для поиска по проекту испольует ripgrep. Про то что все крупные игроки (мозила, гугл, мс, амазон, ...) так или иначе уже используют раст для своих нужд тоже отличный показатель.
Класс. Напомню, вопрос был не в том кто использует раст, а кто разрабатывает на нём. ripgrep в контексте твоего примера - либа, на чём она написана не важно. В мире грепалок люди всё также продолжают использовать grep и egrep, они всё так же хороши для их задач. Мой пример - это новая утилита, автору было всё равно на чём её писать, но он взял и написал на Go. Так вот, почему Го, а не раст/плюсы/си? Потому что Го прост и достаточен для решения этой задачи. Ты просто берёшь блокнот и пишешь код на уровне между сишкой и вторым питоном, и получаешь что тебе нужно. Раст же тебе сразу диктует кучу требований к правильной архитектуре приложения, что для наколеночной тулзы уже слишком сложно.
Обратный пример - Кубер. Он классный, но его сложность превысила инструменты языка и они напилили костылей только чтобы не переписывать всё на новом языке. Но почему они начали на го, если знали что пилят? Хз.
> И чем питон идеален? Тем что для запуска тулзы у тебя в системе должен стоять питон? Нет спасибо.
Для сборки гошного бинаря тебе тоже нужен компилятор. Питон просто намного более декларативен, что для Proof of Concept куда приятнее. В мире эксплоитов похуй на чём они написан, лишь бы работали. Куча скриптов вообще на повершелле, ибо винда.
И да, покажи мне систему без питона. Нескучный DE для WSL не предлагай.
> Но почему они начали на го, если знали что пилят?
Они начинали на джаве, но потом сверху спустили команду форсить го.
> Питон просто намного более декларативен
Имперптивный донельзя, как и гопараша.
https://github.com/search?utf8=✓&q=stars:>1000+language:Rust&type=Repositories&ref=advsearch&l=Rust&l=
Инфы по закрытым проектами, как ты можешь догадаться у меня нет, а про мои вряд ли тебе будет интересно, ибо confirmation bias. Но я уже не на первом месте работе пишу на расте. Нет, не блокчейн.
К содалению, в списке полтора серьезных проекта, а остальное - очередные http-библиотеки и консольные утилиты
И что такого в крестовых шаблонах тебе заходит? Они пиздецом перестали быть только в свежем стандарте с приходом концептов.
Inb4 вариадик темплейтс, но я пока не встречал примера, где от вариадиков жизнь кардинально поменялась
>И что такого в крестовых шаблонах тебе заходит
Динамическая типизация. Когда ты используешь их по изначальному назначению - а именно как слегка типизированный вариант сишного препроцессора, они охуенны. Можно комбинировать алгоритмы в статике, можно, подставлять флоаты и т. д. Самое приятное, что это работает даже на CUDA.
А концепты наоборот хуйня. Потому что одно дело тайпклассы, которые могут разрешаться ad-hoc, а могут тянуть за собой указатель таблицу функций и быть полиморфными в рантайме, концепты это просто способ чуть менее запутанно падать во время компиляции. Мне это вообще никак не помогает.
for x in (0..9){
for y in (0..9){
for z in (0..9){
SOME_OPERATION
вот этот SOME_OPERATION бывает нескольких типов. Как бы тут и переиспользовать код, и не проебать оптимизации? Ну, чтобы и if или вызов внешней функции внутрь не засовывать, и копипастой не заниматься.
Я придумал такой вариант - передавать параметром inline функцию, но что-то сомневаюсь - а конпелятор это норм отпимизирует?
Дженерики растовые разве не то же самое? А если тебе нужен почти одинаковый — но таки разный — код для каждого типа, то просто
fn foo<T, F>(t: T, f: F)
where F: FnOnce() {} // or Fn() or FnMut()
И пихаешь кложуру в этот <F>.
>>512246
Пихаешь кложуру. Насчёт оптимизации не ебу, честно говоря, это надо гуглить.
Почти всё про пихание кложур наглядно расписано вот тут:
https://doc.rust-lang.org/rust-by-example/fn/closures/input_parameters.html
Вот беру я код из примера по дженерикам
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);
}
Стираю :Display
fn 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. Поэтому возникает два стула, либо стабы, либо какие-то ебические количества микротрейтов. Это уже проходили в хаскеле, когда оказалось, что монада это апликативный функтор, а вот прелюдия думает по-другому.
Короче, лично для меня отсутствие темплейтов это большой и бессмысленный гемор, который выливается в еблю с системой типов вместо програмиирования.
Вот беру я код из примера по дженерикам
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);
}
Стираю :Display
fn 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. Поэтому возникает два стула, либо стабы, либо какие-то ебические количества микротрейтов. Это уже проходили в хаскеле, когда оказалось, что монада это апликативный функтор, а вот прелюдия думает по-другому.
Короче, лично для меня отсутствие темплейтов это большой и бессмысленный гемор, который выливается в еблю с системой типов вместо програмиирования.
Алсо крайне забавно что в крестах подобный код вообще бы вопросов не вызвал будет ли оптимизирован или нет.
Можно даже тупо template<enum> сделать и свитч в коде ебнуть. Очень просто и наглядно.
Круто, хули. Но в чём проблема написать два слова в T:?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=fe7aa58b6b945075590d6a16f63e1762
Для простеньких структур есть #[derive] вместо кучи прописываемых руками impl'ов.
Тебе же не нужно вписывать в ограничения типа функции все трейты, нужно вписывать только те, которые ты используешь.
Но да, писать надо чуть больше, чем в C++.
А в расте нет вопросов по поводу того, будет ли оптимизирована передача кложуры.
https://www.reddit.com/r/rust/comments/7y2h09/how_powerful_are_closures_really/
Дядя, а ты не путаешь trait objects и generics? Дженерики-то как раз реализованы через мономорфизацию типов, прямо как шаблоны плюсов. А trait objects - это как раз те самые 2 указателя, прямой аналог виртуальных функций плюсов.
>Но в чём проблема написать два слова в T:?
Нужно знать эти два слова.
Вообще это типичные два стула между статикой и динамикой. Темплейты - это динамика, которая не требует описания, но зато падает со стектрейсом. А вот баунды падают не так громко, зато требуют дополнительной бюрократической работы. Которая лично мне не пришей пизде рукав.
Да тебе конпелятор прямо в ебло выдаёт эти слова, вроде "std::ops::AddAssign", "Copy" или "Send". Не вижу проблемы. А вот выгоды, если ты пишешь в команде хотя бы из двух человек — вижу. Потому что если ты хочешь передать в функцию некий тип, то ты сразу видишь, реализацию каких трейтов тип должен иметь. И тебе не надо ползать по функции, выискивая плюсы, минусы, шифты и прочее, потому что всё, что применяется к этому типу ты видишь прямо в начале функции.
> Потому что если ты хочешь передать в функцию некий тип, то ты
Пиздуешь имплементировать трейты для того чтобы просто использовать функцию со своим типом. Даже если 90% функций трейта тебе нахуй не нужны.
Ты так говоришь, будто ты каждый день по типу добавляешь, для которого надо трейт Float реализовывать
Алсо, пикрил я сгенерил одним хоткеем за 2 секунды и ненужные методы можно не реализовывать.
Если это простая структура, то тупо #[derive], а если сложная, то ты всё равно должен или имплементить Add, или оверлоадить +, если ты будешь его использовать в той функции. Вот только в расте ты можешь сразу посмотреть, есть ли нужные тебе трейты, даже не прогоняя код через компилятор. И какая разница, сколько функций трейта тебе нужны, если все они требуют имплементить только одну функцию? А если не одну-две, то нахуя ты вообще это трогаешь, если оно тебе не надо? Мне кажется, ты пришёл в раст, потому что раст на SO четвёртый год подряд "мост лавед", потыкался, попытался сделать то, что не очень приятно делать на расте, и разочаровался в языке.
>>512324
>>512332
>>512342
Твоя проблема из пальца высосана. Хочешь писать C++-way - придется делать стабы. Хочешь писать по-нормальному - либо пиши свой трейт для типа, либо реализуй чужой трейт. Все это займет максимум час и проблем позже не доставит. И не надо говорить, что мол геморно - ты каждый день новые реализации float не пишешь, так что реализовать даже чужой огромный трейт - задача ненапряжная. Зато потом другим разработчикам (да и тебе самому) не надо будет ползать по исходникам, выискивая заиспользованные операции.
По этой же причине в C++ завезли концепты, потому что намного приятнее увидеть интерфейс шаблонного параметра в самом начале шаблона, чем потом составлять этот интерфейс ручками и охуевать от километровых ошибок компиляции, когда ты с этим интерфейсом где-то проебался.
Даже C++ отказывается от говнопрактики, которую ты юзаешь, а ты на Rust пеняешь.
>>512347
alt-insert в idea
Твой unimplemented реализован через panic и падает в рантайме. А в плюсах будет ошибка компиляции. Плюсы вин.
Если твоя функция должна обрабатывать только стандартные флоаты и твой qfloat, то какого хуя ты нашёл num_traits крейт? Потому что функция, которая обрабатывает обычные флоаты не требует этого крейта, если только не имплементит все трейты для обычных флоатов (или не превращает флоаты в кастомную структуру за сценой. Тогда тебе надо имплементить только две функции, которые выглядят как "foo(q: qfloat) -> generic_float {}" и превращение в обратную сторону. Но если для обычных флоатов уже известны все константы, то тебе эти константы для qfloat надо знать, если ты хочешь реальное превращение оттуда-сюда и обратно. А это будет ебля хоть в расте, хоть в крестах) под этот крейт. А если тебе нужен этот крейт, то сперва будь уверен, что тебе нужен именно этот крейт. Потому что он очень специфичный, сделан под #![no_std]. И если qfloat ничем не отличается от обычных, то кто мешает тупо скопипастить имплементацию обычных?
>>512390
https://docs.rs/num-derive/0.3.0/num_derive/derive.Float.html
Муля, не нервируй меня!
В Rust-е нет дженериков, которые сопоставляют шаблонный параметр с фактическим интерфейсом, заюзанным в шаблонной функции. И правильно сделали - хочешь использовать дженерики - укажи интерфейс шаблонного параметра заранее, блеать.
А если хочешь использовать фичу, которая даже в самих плюсах с 20-го стандарта объявлена устаревшей - ебись с ошибками в рантайме. Да, анон, в C++20 от тебя требуют писать ровно те же трейты, что и в Rust. Только в Rust-е это обязательно, а в плюсах - можно забить и написать говнокод.
И часто ты этим alt-insert пользуешься? Как вообще поддеркжа раста в идее? Сама иде не тормозит?
alt-insert юзаю постоянно и во многих языках: C++, java, scala, rust. Плагин раста в идее работает еще хуже, чем скаловский, но выбирать как-то не приходится. Сама идея тормозит только в исключительных случаях, если выдать ей гигов 8 памяти (что все и делают)
>Сама идея тормозит только в исключительных случаях, если выдать ей гигов 8 памяти (что все и делают)
В смысле практически никогда не тормозит, если выдать ей дохера оперативы
Сравнивал с альтернативами? И что умеет расто-плагин? Точнее даже, что не умеет?
Неа
В расте вообще нет GC. Собственно, главное различие. Все остальные различия примерно те же, что между любым C-based-lang с ограничениями и растом. Но мало кто будет сразу ,да и вообще писать на D без GC потому что без GC он ничем не лучше крестов, а обратная совместимость, сам понимаешь. А в расте у тебя выбора нет, но он и без GC выглядит неплохо, пока ты не упираешься в какую-то грязь, которая требует ансейфа и изъёбов в основном это алгоритмы с нестандартными структурами данных и просто нестандартные или оптимизированные для чего-либо структуры данных.
> Попробуй сначала из крудо-формошлепства перекатиться в чистый бекенд с кафками-куберами-облаками-grpc'ми-числодробилками-хуйлоадом
А где этому учиться? Можешь посоветовать книжек и ресурсов?
Мимо-embedded на си, который учит node.js и хочет заниматься дрочкой серверов
> которая требует ансейфа и изъёбов в основном это алгоритмы с нестандартными структурами данных
Как двусвязный список, например? Очень нестандартная структура данных.
Спасибо, Капитан. А если это был сарказм, то скажи мне, сколько раз ты использовал двусвязный список в своём коде? На каждую сотню использованных векторов и каждый десяток очередей? Как часто тебе нужен был модифицированный список?
Толсто. И hh.ru чуть ли не самый худший вариант для поиска работы на расте, хотя и там иногда проскальзывают вакансии. Пока что Рашка не доросла до раста, ракорастов берут пока что только в Европке или Америке.
раст основным хард-скиллом не идет вообще нигде. Только как плюс лол
В заголовках везде джава и макакаскрипт с сисярпом
Нет, ибо на раст нет работы и так, что уж там про удаленку говорить, да еще и за 7к. Только если свою ОС на ржавом напишешь
ну чтож...
struct PieceOfShit {
parent: Option<Weak<Rc<RefCell<PieceOfShit>>>>,
some_data: String,
child: Option<Weak<Rc<RefCell<PieceOfShit>>>>,
}
>child: Option<Weak<Rc<RefCell<PieceOfShit>>
Зачем такая длинная запись, просто Option<RefCell<>> не катит?
>пока очень сыро
https://wiki.mozilla.org/Oxidation#Shipped
Сухим он никогда и не будет, все готовые куски просто тащат в фф и мерджить с гекко, а в серво будут тащить новые экспериментальные фичи.
Ну давай сравнивать, где больше изъебов и где понятнее код.
http://cs.brown.edu/people/jwicks/libstdc++/html_user/stl__list_8h-source.html
https://doc.rust-lang.org/src/alloc/collections/linked_list.rs.html#38-43
Так себе сравнение если честно, для меня нет победителей. С++ просто нечитаемое говно, а раст при первом же упоминании list скатывается в unsafe
> А где этому учиться?
На работе, на должности бекенд-разраба.
> Можешь посоветовать книжек и ресурсов?
Пикрилы например, + видосы со всяких highload'ов. Первое для получения хоть какой-то базы, второе чтоб контекст в голове получился.
> node.js
> дрочкой серверов
Посмотри на хх, сколько вакух на чистый js backend, и сравни с питоньим и гошным бэком. Почитай, что хотят в вакансиях. И походи по собесам. Так, для понимания рыночка.
Тебе понадобится знание языка, платформы+фреймворка, какой-нибудь sql/nosql-бд, какого-нибудь брокера сообщений, общие поверхностные знания о сетях/протоколах/форматах данных/способах предоставить api, и умение пользоваться докером с каким-нибудь оркестратором (compose/swarm/кубер).
У Сишки нет генериков, и даже без них Раст даёт банальные вещи вроде человеческого стектрейса по ООМ, который в Си нужно отдельно вкорячивать костылями. У всех остальных языков к двунаправленному списку нужно прибавлять весь код сборщика мусора, потому что без него он не имеет смысла.
Мораль в том, что двусвязный список - это нифига не что-то тривиальное, если браться серьезно. А ансейф - это часть языка, причем далеко не повсеместно нужная.
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...
Потому что ты вызываешь функцию чайлда на данные парента. И данные парента не должны сдохнуть до того, как сдохнет чайлд. Конпелятор не может этого обещать, потому что вызывает drop() на весь парент, а не на куски его данных. И я до сих пор не могу понять, нахуя тебе вот это вот наследование, если оно в расте реализуется только через уёбищное Box<dyn TraitObject>. Тем более, у тебя нихуя нет наследования, потому что парент i32, а чайлд u32. Если тебе надо только строку расшарить, то Rc<String> и клонируешь стронк референс. А если тбе иногда надо мутать эту строку, но ты её мутаешь редко и не в цикле, то Rc<RefCell<String>>, там оверхед маленький, если постоянно не менять эту строку. А если тебе эту шнягу из разных потоков надо менять, то Arc и Mutex.
>данные парента не должны сдохнуть до того, как сдохнет чайлд
>Конпелятор не может этого обещать
эм, а почему, собсно? Ведь чайлд, это тоже данные парента. Как, разве может парент проебаться, а чайлд - нет?
>надо только строку
в том и дело, что это только в этом примере. В реальности без коллбэка никак ну никак, мам!
>наследование
не смотри на данные, нет там цели что-то отнаследовать, эт я так, для более дальнейшего примера добавил и забил, а удалить забыл.
Что мешает сделать так?
struct Data { vec: Vec<usize>, other_vec: Vec<f32> }
pub struct Parent { d: Rc<Data>, p: i32 }
struct Child { d: Rc<Data>, c: u32 }
>Что мешает сделать так?
Через Rc<RefCell<Mutex<Box<Uebox<... все могут. А я хочу понять, какого конпелятор по-умолчанию считает, что парент может проебаться раньше чайлда (или что там значит его ругань на лайфтаймы, если не это самое)
Если бы у тебя было
struct Parent {}
struct Child { p: &Parent, c: i32 }
То конпель и слова бы не сказал, потому что ссылку на парент ты передашь только с лайфтаймом. А про ссылку на часть данных я тебе уже рассказал, так что не нервируй меня, Муля.
Но если интересно, почему ссылка без овнершипа недействительна, смотри Pin в стандартной библиотеке.
А, чёт в глаза ебусь. У тебя же child — это кусок парента. А ты хочешь из чайлда вызвать функцию на другой кусок парента. Это селф-референс, правильно я тебя в Pin отправил. Если прочитал про Pin, но нихуя не понял, то загугли repr(Rust) в номиконе. И если у тебя чайлд — это кусок парента, то хули ты просто из парента не вызовешь функцию? Ты же можешь тупо достать любые данные чайлда, потому что он кусок парента. То есть
impl Parent{
fn wtf(&self) -> AnyType {
let data = self.child.get_data();
return self.do_smth_with_data(data)
}
}
> прочитал про Pin
прочитал, чё-т примерно понял, что данные в расте могут мотаться по памяти туда-сюда. Ухх.
>хули ты просто из парента не вызовешь функцию
тому що, в реальном примере смыл в том, чтобы её позвал чайлд (один из).
В таких случаях пихаешь парентов и чайлдов в разные коллекции (типа как в SQL) и хранишь в объектах не ссылки, а индексы в векторах.
Собрались в кружок лесорубы, решили ее испытать.
Завели ее, подсунули ей деревце.
«Вжик» — сказала японская пила.
«У, бля...» — сказали лесорубы.
Подсунули ей деревце потолще. «Вж-ж-жик!» — сказала пила.
«Ух, бля!» — сказали лесорубы.
Подсунули ей толстенный кедр. «ВЖ-Ж-Ж-Ж-Ж-Ж-Ж-ЖИК!!!» — сказала пила.
«Ух ты, бля!!» — сказали лесорубы.
Подсунули ей железный лом. «КРЯК!» — сказала пила.
«Ага, бля!!!» — укоризненно сказали суровые сибирские лесорубы! И ушли рубить лес топорами…
То есть, у тебя есть 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>>, либо ансейф.
Ты хотя бы Книгу прочёл, или сразу пошёл код хуярить?
>у тебя есть
У меня есть плюсовый код ndk приложения для ведроида с кучей unsafe вызовов к api ведроида и коллбэков, как завязанных на api, так и чисто внутренних.
Сейчас я просто решил внутренний коллбэк переписать в растовом стиле, без этих *mut ctx и прочей жути.
Можно, конечно, переосмыслить и переписать раставейно, но я бы предпочёл сперва получить рабочий вариант, а уж потом его переосмыслять.
И да, книг не читал, т.к. у меня в голове так ничего не откладывается. В режиме поиска ответов на возникающие вопросы оно как-то лучше прёт.
То есть, вместо того, чтобы тыкать во врага копьём, ты пытаешься руками затупить наконечник, чтобы потом можно было махать как дубиной? Как же был прав анон с анекдотом про лесорубов.
Короче, либо листаешь быстренько Книгу, особенно внимательно читая семнадцатую главу, либо пиздуешь писать на том языке, который уже знаешь. Если не хочешь Книгу, то читай rust by example, там та же книга, но в виде комиксов.
А если вообще ничего не хочешь читать, то либо дай уже ссылку на то, что ты реально хочешь сделать, либо пихай селф-референс через ансейф Pin, либо делай как тут написано >>514057
Начиная от юзерской и крудовой хуиты (любое приложение со списком: плеер/контакты/список дел, любое приложение с вкладками: браузер/файловый манагер/консоль, любое приложение где нужно undo-redo: текстовый редактор/wyswig редактор/редактор таблиц, любая круд залупа в конце-то концов и тд), проходя байтойобство (любой GC, любой тред манагер, любая система сборки и тд), и заканчивая хуай-теч еботой (любой конпелятор, любая распределёнка, любая jit-вм). Вот нигде, блядь, не нужная структура данных. Я хз вообще что ты там можешь писать.
Перечитал, и понял что с GC перегнул, там односвязным все обходятся, ладно.
Ну, в плюсах и сях, в отличие от раста, списки обычно все делают руками (или юзают буст, если он уже есть в проекте), ибо неинтрузивный список = 2x оверхед от ожидаемого, и std::list персона нон грата в любом проекте, так что сравнивать странно.
Кстати, а во что разворачивается растовый LinkedList? Хранит ссылку как std::list или инлайнит данные? Вангую что первое, и в расте по-хорошему так же надо делать сырые списки руками, гыг.
Лень гуглить, как выглядят генерики в расте? Просто указываешь от чего наследовать шаблонный параметр?
В джаве ебанина какая-то переусложнённая
Ну так генерики джавы придумал Одерски (автор скалы), оттуда и type erasure, и прочая околоакадемическая ебанина.
> Хранит ссылку как std::list
Как там в С++03? У нас тут в будущем появились операторы перемещения и прочие ништяки.
Сорцы же можно посмотреть из доков.
https://doc.rust-lang.org/src/alloc/collections/linked_list.rs.html#38-43
Лист состоит из нод, нода — структура из данных и двух указателей (с размером указателя, даже несмотря на обёртку Option<>, потому что NonNull<> указатель, а Option::None разворачивается в null, которого в расте нет, только в байткоде раста). Это вроде как интрузив.
>>514158
Как foo<T>( variable: T) -> T { return variable }
Где T — любой тип, позволяющий производимые операции. Выглядит так, работает чуть иначе, чем выглядит.
https://baptiste-wicht.com/posts/2012/12/cpp-benchmark-std-list-boost-intrusive-list.html
Ну такое.
>>514170
>Это вроде как интрузив.
Это вроде как набор слов.
>структура из данных и двух указателей
Если данные таки лежат отдельно — то это не интрузив нихуя.
А что ты хочешь? Какую-нибудь ультра-ансейф
mem::transmute<Node, T>(node)
структуру вообще без обозначения этой структуры, чтобы какие-то байты там отвечали за данные, а какие-то за указатели, но процессор при этом вообще бы не знал, какие там данные за что отвечают? Иди читай repr(rust) главу в номиконе, тебе и так компилятор оптимизирует всё то, что по стандарту С не оптимизируется, а ты хочешь какую-то магию ебаную, которую даже на ассемблере не сделать.
#![feature(alloc, heap_api)]
use std::alloc::heap;
сразу же вот такая ошибка отдается
unresolved import `std::alloc::heap`
Где теперь искать heap? Очень нужно выделять куски памяти произвольного размера простым api.
Немного неясно выразился. Я говорил не о списке, как он определяется в линейной алгебре, а о структуре данных «двусвязный список» с O(1) добавлением/удалением в конец/начало/середину и с возможностью обратного прохода по списку. Ни разу не встречал еще необходимости именно в полном списке этих свойств. Всегда список можно было заменить на односвязный или на банальный массив
Смотри обсуждение выше по треду. Вкратце - дженерики тут охуенные. И баунды, которые тебе не нравятся в джавовских дженериках есть в расте. Как и в С++20, лол
Был box кейворд, но его так и не стабилизировали. Смотри функции вот тут
https://doc.rust-lang.org/alloc/alloc/index.html
Или в std::alloc
В коре аллока нет, если ты микропроцессор через core пишешь.
Ещё один блядскую магию хочет. В любую точку списка тебе O(1) не вставит, потому что дойти до этой точки по указателям — O(N). O(1) только туда, куда у тебя уже есть указатель. Обычно это начало и конец.
Ну т.е. мне нужно смотреть в сторону функции alloc_array и юзать ее для u8, если я хочу получить аналог malloc из c, я правильно понимаю?
Я хочу, чтобы данные просто лежали в памяти вместе с ссылками. Для понимания: в плюсах для этого просто наследуются от класса с ссылками и всем остальным. В расте способов замутить такое (кроме макросов, которые ниебически раздуют код) как я понимаю, нет?
>>514195
Ну так перечитай моё сообщение, я тебя правильно понял, и все примеры в том посте именно о структуре данных, лол. Как ты что угодно с undo-redo/вперёд-назад или lru без него замутишь?
https://doc.rust-lang.org/std/alloc/struct.System.html#method.alloc
В душе не ебу, пока что никогда руками память не выделял, кроме всяких стековых векторов. Но там же доки охуенные, всё описано.
Ты ёбнулся? Я тебе дал ссылку на сорцы, рассказал, что структура для данных хранит в себе не только данные, но и два указателя. А ты начал пиздеть, что не интрузив. А что тебе тогда интрузив, ебанутый?
Маня, вставлять в список можно, имея итератор. Совсем необязательно идти в место ставки, чтобы вставить/удалить элемент
Это ты про итератор который может инвалидироваться и ты начнешь писать хуй пойми куда? Классические кресты?
Это в том списке, в котором указатели не в структуре с данными, а в массиве на стеке лежат. А в нашем тебе надо по куче бегать по указателям: берёшь ячейку, берёшь из неё указатель, берёшь по нему следующую ячейку, берёшь из неё указатель... И так пока не найдёшь нужную ячейку.
Пока пиздел тут, загуглил типы данных раста, и понял что это не интрузив лист нихуя.
В таком листе лежит 3 ссылки (и длинна зачем-то), вместо 2 ссылок и данных. В первом случае для доступа к данным после того, как мы доитерировались до нужной ноды, нам придётся лезть в рандомный кусок памяти хуй пойми где на бенчмарках это редко видно, потому что твоя программа в одиночку активно срёт в память, хотя даже по ссылке выше видно разницу в простом бенчмарке но ирл без компактирующего гц ноды раскидывает по всей оперативке), а в первом данные всегда будут в кэше сходу, как только мы дошли до ноды. Так понятно?
PhantomData — не ссылка, а структура с нулёвым размером, которая просто говорит компилятору, что у нас тут Box<T>, а не Option<NonNull<T>> (который и есть Box<T>, что я тебе в самом первом посте объяснил. И нет, у нас тут не C, где нулёвые структуры занимают 1 байт, у нас раст, где нулёвые структуры занимают 0 байтов).
И если ты мне сейчас не скажешь, как ты хочешь, чтобы выглядел псевдо-байткод, то я с тобой разговаривать не буду больше. А когда ты мне покажешь байткод, я тебе скажу, что он точно так же выглядит в расте (и даже лучше в большинстве случаев, потому что компилятор сам оптимизирует расположение элементов в структуре, а твои кресты с обратной совместимостью так не могут).
Да ёптваю мать. На пике структура Node. Она содержит в себе две ссылки и объект (НЕ ССЫЛКУ НА ОБЪЕКТ, БЛЯТЬ). Как только мы дошли до ноды, нужные данные лежат ровно на 16 байт ниже этой ноды (А НЕ В РАНДОМНОМ МЕСТЕ, БЛЯТЬ).
Определись, что тебе надо. Я не знаю, может ты хочешь выделять память на стеке. Тогда тебе растовый LinkedList не поможет. Но у меня ощущение, что ты сам не знаешь, что несешь.
А еще я прочитал-таки твою ссылку:
>For the intrusive list variations, the data are entered into a vector and then pushed back to the intrusive list.
Оказывается вызывать malloc один раз - это быстрее, чем вызывать его один раз. Удивительные открытия.
Не факт. Оптимизация компилятора таки может сунуть любое поле структуры куда захочет.
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1c4650ca4dad0d7a327689e4e495785a
repr(C) называется. Вот только ты уверен, что разберёшься с памятью лучше конпеля? Эта структура без оптимизации занимает на четыре байта больше.
Сударь, ваша карта бита
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=860789dcb2dd6ffa5685487377bcdafc
да, читал про подводные камни
Ты же знаешь, что packed просто так работать не будет? Что это ансейф для процессора, и каждый раз, когда ты что-то делаешь с запакованной структурой, ты должен чётко понимать, что делаешь?
https://doc.rust-lang.org/nomicon/other-reprs.html#reprpacked
А ещё, у меня в твоём примере поменялись местами "aaaa" и "cccc". Так что не бита.
>поменялись местами "aaaa" и "cccc"
Справа налево, от младшего бита к старшему
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=03c41a0e7b3b95adbcb4b8e635522ae9
>>514430
>ансейф для процессора
Баюс - баюс. Зато можно в файл писать-читать предсказуемо. Хотя, впрочем, не пробовал.
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=c396822b2e2cfaf9dff8da2987582799
даже не знаю, что хуже - это, или обёртывания Rc<RefCell<...
а, да, это найтли, но и похуй. В стейбл арифметику указателей не завезли, но куда без неё - рано или поздно этот ptr_offset_from или что-то наподобие стабилизируют.
Уже много часов как. И картинку твою лучше под было кинуть под эту ссылку:
https://tokio.rs/blog/2019-10-scheduler/
Это я всё с переписыванием с крестов - в крестах для вызова этого метода аж поток форкался.
Откуда мы можем знать, будет ли оно работать, если мы не знаем, что должно работать? Но вообще, да, должно. Async возвращает Future, которая сама по себе ничего не делает. Чтобы она что-то сделала, надо её выполнить. Но вот когда ты будешь её выполнять, это уже сам решай.
https://rust-lang.github.io/async-book/01_getting_started/04_async_await_primer.html
Вот, эт самое, а можно её выполнить без блокировки? Ну, тип, надо мне записать файл - чтобы оно там как-нибудь пошло записываться, а выполнение дальше пошло.
Для этого нужен экзекутор, в std его пока еще нет.
https://docs.rs/tokio/0.2.0-alpha.6/tokio/
А зачем тебе async, если тебе просто в файл записать что-то надо? Не проще заспавнить тредак, который этот файл обработает? А если тебе надо убедиться, что два тредака не полезут в один файл, то там всё равно будут блоки, вроде FIFO очереди с задачами, где следующая выполняется после того, как предыдущая вернула некое Ok(imma_done).
>Не проще заспавнить тредак
Дак там у меня полно raw пойнтеров, а с ними "cannot be sent between threads safely".
https://doc.rust-lang.org/stable/std/?search=from_raw
Выбираешь нужный тип и вперёд. А если тебе нужен не смартпоинтер, а тупо атомик примитив, то выбираешь из этих
https://doc.rust-lang.org/stable/std/sync/atomic/index.html
и создаёшь этот атомик из значения своего рав поинтера.
О, лол, я даже не заметил, что там есть AtomicPtr, который как раз рав поинтер, но Send.
Что так через тупо вызов треда, что эдак через async & LocalSpawn - получаю 'Unable to spawn: SpawnError("shutdown")' даже на вызове пустой функции-заглушки без параметров.
Надо попробовать воспроизвести на чистом примере и багулю куда-нить репортнуть.
И да, это я всё под ведроид корячу.
Короч, завелось асинхронное сохранение. Сделал тред, в который передаю AtomicPtr (спасибо, аноний), до этого передавал слайсом, который получал через from_raw_parts. Но, что странно, версия с LocalSpawn вылетела вообще без передачи каких-либо параметров. Но это, мож я проглючил и затестил старый бинарь.
Можете меня поздравить, у меня теперь есть рабочая аппликуха, представляющая собой переписанный пример камеры отсюда https://github.com/android/ndk-samples/ (я взял texture-view и добавил в него функционал съёмки и сохранения из basic)
Осталось теперь работу найти.
Ссылок и примеров реального кода не будет? Да и переписывать что-то на раст, балуясь ансейфом и голыми указателями просто так, а не ради оптимизации — так себе затея.
А ещё, я проебался немного по поводу AtomicPtr, он Sync, а не просто Send.
>Да и переписывать что-то на раст, балуясь ансейфом и голыми указателями просто так
Это я пока только пример переписал, дальше буду делать из него полноценное приложение. Буду брать за него деньги и жить на острове в гареме с наташками. Если не фартанёт, то выложу в попенсорс.
Что касается голых указателей - без них никак, так как там идёт очень плотное взаимодействие с API.
А у него там реалтайм-залупа? Подозреваю какую-нибудь дорисовку рожиц на лицах, но в андроиде уже по идее все либы для этого есть, чтобы прямо из явы дёргать, ну и в самом андроиде всякие апи, которые эффективнее не реализуешь, а FFI в любом языке одинаково работает.
Ну хочет написать имиджпроцессинг/игровой движок/кроссплатформенный гуй на (без гб памяти на старте) — пусть пишет. Низкоуровенных библиотек (тем более на мобилках, часах итд) всегда поле непаханное, тем более что всё дырявое как ебаное сито (что ведро что айос). Я хз чего ты доебался.
Мне ko-ko-kotlin не интересен, в отличие от раста. С другой стороны - писать хайлоад-сервисы в качестве домашнего проекта не интересно, а вот приложуху - оче даже. Так что, в лучшем случае у меня будет приложение и прокачка в расте, в худшем - только прокачка.
Алсо, сам по себе нативняк при работе с камерой позволяет решать "в лоб" задачи, для которых на жабе/котлине пришлось бы пуд соли съесть, чтобы работало и не тормозило.
>нативняк при работе с камерой позволяет решать "в лоб" задачи, для которых на жабе/котлине пришлось бы пуд соли съесть, чтобы работало и не тормозило
Какие? Т.е. что конкретно ты будешь делать?
Для обработки пикселей должны уже быть либы готовые, с NEON-оптимизациями, раст тебе в этом не поможет. Там конечно есть интринсики, но вряд ли ты их будешь писать сам, т.к. та ещё еботня. Да и не сильно сложнее вызывать асм-код из явы (т.е. скомпиленный отдельно ассемблером), интринсики реже используют на практике.
Я не к тому, что раст не нужен, просто интересно зачем тебе он понадобился на андроиде.
>либы готовые, с NEON-оптимизациями
Для обработки пикселей есть renderscript или vulkan, если уже по-большому ходить.
>понадобился на андроиде
прост. NDK жи есть, но на стрёмных плюсах. А тут я хочу на модном расте попробовать, ну и самоцель - больше в изучении языка.
есть куча ffi функций вида ACaptureRequest_setEntry_rational , ACaptureRequest_setUserContext и т.д., которые принимают первым параметром "request: *mut ACaptureRequest" - хочу через build.rs нагенерить для этого всего обёрток, чтобы автокомплит работал.
Сам нашёл, syntax::parse
Юзай обычный стек для процедурных макросов: proc_macro2 + syn + quote. Покроешь все кейсы.
>маняфантазии
This.
Даже если всё переписать на руст, unsafe процессор всё равно вылезет и начнётся: meltdown, spectre, хуектер. А если мы закатаем процессор в ещё 3 виртуальных процессора, то начнутся дырявые сетевые протоколы. А потом, когда и их залатаем, для пущей безопасности надо хотя бы размещать датацентры в космосе будет.
Там узявимости тащем-то уровня "на си написали, а тут — бац — и буфер оверфлоу".
Ну ты сейчас берёшь, открываешь радномный ченджлог рандомной скриптохуйни
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).
Я тебе про другое.
https://www.cvedetails.com/vulnerability-list/vendor_id-2337/product_id-4096/ даже наличие манажед языка не избавляет от проёбов.
>gdImageScaleBilinearPalette
Как раст спасет от ошибок в сишных либах? Или ты предлагаешь все окружение на расте переписать? К тому же сейчас можно пересобрать либы с защитой стека, и ROP-ы не так страшны как раньше.
Ну так эта ветка диалога и началась с фразы "а шо если всё переписать на руст"?
>К тому же сейчас можно пересобрать либы с защитой стека
Ведь все в мире аутисты гентушники, и собирают под себя весь мир.
>Ведь все в мире аутисты гентушники, и собирают под себя весь мир.
Если тебе безопасность важна, то это сделать гораздо проще, чем переписать все окружение на другом языке.
Проще поставить hardened дистрибутив, где все уже собрано.
https://github.com/rust-lang/rust/issues/28687
только у меня эта хуйня всплыла и сразу нагуглилось.
Вот оно что, михалыч.
Я, вот, распарсил через ебаный syn не, ну на кой мне в ast запятые со стрелочками? Бошку сломал, пока структуру разгреб выхлоп bindgen и сделал симпатичную обёртку поверх андроидных структур. Навряд ли это где-то ещё пригодится, так как в андроиде оче удобно это всё поименовано: СтруктураНейм_методНейм, но мне должно помочь.
Я всю неделю ходил на работу и массаж/лфк. Мне сейчас не до наворачивания своих проектов на расте в свободное время
Или есть подводные? Ну или как всегда "хуяк-хуяк и в продакшн" превыше всего?
unsafe иногда дает такие возможности, что-бы которые реализровать в сейв нужно затратить куча ресурсов.
например банально скопировать цвет из u16 в [u8, u8, u8, u8]. (хотя может я уже устарел и такая фича есть в сейве, но тем не менее)
еще удобно писать сейф враперы под С либы из ансейв кода.
>скопировать цвет из u16 в
уже есть to_be_bytes/to_le_bytes. А вот обратно пока вроде ансейф.
>удобно писать сейф враперы под С
Взаимодействие с сишным кодом - в принципе unsafe. Какой-то, хуй его знает откуда полученный, указатель, а ты его хуяк - и дереференсишь в конкретную структуру. Смысл в том, что если на этом месте у тебя сегфолт наебнёт, то ты сразу знаешь, куда копать.
Затем, что раст — системный язык. Собственно, этим всё сказано. Но если ты хочешь примеров, то пожалуйста.
Имплементить Send и Sync для кастомной структуры — ансейф. Либо не балуешься кастомными структурами, которые не ловят Send и Sync автоматом, что охуеть какое ограничение, либо сосёшь лапу.
Голые указатели. Тут даже говорить ничего не буду, потому что растовая ссылка — голый указатель с обёрткой лайфтайма для компилятора.
Всякие страшные байтоёбища, тот же mem::transmute, что иногда очень удобен, но очевидно, что сейф трансмута не было и не будет никогда. Вот тебе пример, где без трансмута хуй обойдёшься: >>514404
Без ансейфа ты сможешь... ты не сможешь написать ничего. Тебе все равно нужен IO, взаимодействие с внешними либами, а оно by design unsafe, так как хуй пойми откуда там появляются указатели, как работают функцуии и т.п. То есть ты даже hello world не напишешь без unsafe, строго говоря.
Альтернативой может быть разве что ОС и весь софт, написанный на расте, работающий поверх архитектуры, в которой раст это машинный язык (ведь мы понимаем, что использование ассемблерных вставок это тоже unsafe, да?).
Это копия, сохраненная 18 ноября 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.