Rust — невероятно быстрый язык для системного программирования без segfault'ов и с гарантиями потокобезопасности.
ИТТ мы можем объяснить базовые и продвинутые концепции языка, и программирования в целом, поможем вкатывающимся, подскажем что выбрать для веба, игр или, прости Абу, блокчейна. https://www.rust-lang.org/
>>2107844 (OP) Стоит брать раст как второй язык, чтобы в перспективе пилить на нем игры и утилиты под линукс? Не хочу остаться говнокодером одного языка (жава). Сложно учить раст без университетского образования?
>>2108184 А на чем игры то пилить? Либы для геймдева какие то хуевые и не все у меня завелись и я в итоге терь игры на winapi пишу хули еще делать нахуй
>>2108328 Не, хуйня, игры на чем угодно можно пилить, я и на lua, lisp делал, не говоря уже про с++ начиная с sdl,sfml,sigil заканчивая обычным winapi, который и под раст есть. А движки с интерфейсом типа юнити и годот - для дегенератов и школьников.
>>2108332 Повторюсь, если хочешь пет проектики всякие пилить, можешь хоть на хаскеле писать игры Но если собираешься искать работу/пилить что то востребованное то выбор из инструментов и языков становится сильно ограничен
>>2108345 Хуй знает че с вами не так, мы с челом норм так заработали на геймдеве с помощью стима в свои времена, щас уже хуй забили на разработку и прост игры издаем, доход к слову нихуевый.
>>2108359 Вдвоем вкатывались как школяры с юнити разумеется, потом разные яп изучали и мимоходом на них игры и писали. Игр много, а основной доход в стиме с дроча людей на ачивки был, ну и с махинаций типа продажи ключей. Успех постепенный, не сразу же поймешь как в стиме все устроено. Но новичкам щас легче обратиться к издателям чтоб не ебать себе мозг и получать свои проценты, но там уже опционально.
хочешь написать бэк для микроблога @ ставишь rocket, крейты для маркдауна, работы с бд @ папка с зависимостями весит буквально 1 гб @ ты не написал и строчки кода @ учитывая, что у тебя раст тянет какую-то c++ хуйню, чтобы тупо запуститься @ нода @ дохуя зависимостей @ папка проекта 20 мб @ идите нахуй
>>2109237 >Куда уж проще Ну не знаю, если бы мне сказали, что третье практическое задание в книге, это написание многопоточного сервера, то я бы не считал эту книгу простой.
Здравствуйте. Как выучить Rust с нуля (знаний касательно программирования и языков нет вообще)? Клабник Стив книга "Программирование на Rust" "Если вы в программировании абсолютный новичок, то для начала прочтите введение в программирование". В книге этого "введения" нет. Как учить язык если книг для обучения с нуля нет? Ребят ну это какой то треш.
>>2109394 > это написание многопоточного сервера Вангую там написание сервера уровня "взяли готовую библиотеку @ добавили 2.5 функции для обработки запросов". Никто с нуля сервер писать не будет - для этого наверное одной книги не хватит.
Когда почувствуешь, что тебя заебало писать хелоуворлды и перекидывать файлы из директории в директорию, попутно их переименовывая - придумываешь идею для проги, думаешь как это реализовать, гуглишь фреймворки, спрашиваешь в этом треде, Далее начинаешь писать программу, используя и изучая эти фреймворки (Знание языка в вакууме само по себе совершенно бесполезно. Нужно знать определённые фреймворки (В расте ни называются крейты))
Доёбываешь тред по всем непонятным вопросам, вкатываешься в телеграм и дискорд чатики, доёбываешь людей там.
После написания пары программ, ты почувствуешь что твой код - полное, не логичное говно с кучей костылей там, где они совершенно не нужны. Открываешь какую-нибудь книгу по проектированию программ, изучаешь шаблоны проектирования, читаешь про алгоритмы, читаешь базис программирования, погружаешься в низкоуровневые особенности языка - как он работает со стеком и хипом, как в памяти хранятся разные типы, какие регистры для каких функций используются, много экспериментируешь, пытаясь понять - что и как НА САМОМ ДЕЛЕ работает вплоть до SysCall-ов/WinAPI
Потом переписываешь свои программы, но уже учитывая печальный опыт разработки их впервые (У тебя желание их переписать возникнет само по себе в процессе их написаия. Это значит, что твои скиллы выросли)
>>2109747 Ты сделал первый проект, описаный в книге? Там где игра "Угадай число"? Какую именно программу ты хочешь написать? Показывай свои попытки это сделать.
>>2109760 Наверно он увидел страшные слова при разборе хеллоуворлда - функция и параметры. Без описаний на месте что это такое и ретировался. Не понимает что это потом объяснять будут.
>>2109800 Переменная в программировании это то же самое что и в математике. Только в математике они называются одной буквой (x, y и т.д.) А в информатике букв в названии переменной может быть сколько хочешь.
Все переменные хранятся в оперативной памяти компьютера. Ты можешь объявить компьютеру переменную и тогда он выделит в памяти небольшой участок специально под неё (Несколько битов). В расте за это отвечает команда let let peremennaya; Ты можешь этой переменной присвоить значение. То есть, поместить в тот небольшой участок памяти, который пека тебе выделил, какое-то значение.
Например команда: let peremennaya = 2; Выделит на плашке оперативной памяти участок и поместит туда значение 00000010 (Нули и единички потому, что всё в компе хранится в двоичном виде)
>>2109820 >>2109800 А потом ты можешь получить это значение, когда оно тебе будет нужно Например можешь написать let vtorayaPeremennaya = peremennaya + 10 И тогда во второй переменной у тебя будет 12
Можешь вызвать println!(peremennaya) и компьютер в командной строке выведет тебе двойку
>>2109820 Ты же не будешь ему теперь всю книгу так объяснять. Когда сравниваешь с матаном необходимо еще делать упор на то, что знак `=` не то же самое что в математике. Новичков это часто сбивает с толку.
>>2109856 Математика - лучший язык для строго выражения отношений абстрактных объектов, а так же их свойств. Если язык программирования стремиться к тому чтобы быть максимально выразительным и точным, он должен быть ближе к языку математики.
Открываем компанию "Пидрильный клуб любителей NodeJS-модулей и системы владения". Даем рекламу в кодерский журнал: мол у нас есть такой ЯП для внедрения в сервера. Ну, дескать делает то, что не может ни одного другое устройство, последний прорыв в ИТ, быстрый и безопасный код гарантирован. Основы этого ЯП изучаются по официальной документации за неделю вместе с hello-world репой на гитхабе. Для разработчика это херня за такую кучу удовольствия. Но репозитории они называют прилично, что-то типа "Hello Word на Rust: быстром и безопасном убийце C++". По репозиторию с каждого разработчика. А мы в Mozilla пилим статьи и говорим, какой у нас популярный язык программирования. А запутка вот в чем: мы возвращаем им Result<>'ы назад с формулировкой "Извините, убить плюсы не получилось" от компании "Пидрильный клуб любителей NodeJS-модулей и системы владения". И тогда посмотрите, сколько человек удалят репы - не единая душа, кому охота, чтобы их друзья знали, что в свободное от создания репозиториев время они занимаются хуйней.
>>2109820 Иногда не в оперативке. Вообще, при изучении языка привязываться надо только к абстрактной машине, потому что потом тебя ждут сюрпризы, если привязался к x86 или другой зардваре.
>>2109648 Смотри, анон. Начинай всё с книги Beginning Rust: From Novice to Professional (автор Carlo Milanesi). Затем, если всё ещё хочется читать, наворачивай Programming Rust от издательства O'Reilly. Параллельно ковыряй Rustling course с оф. сайта и переходи на Rust by example там же.
>>2110128 Друг, а вот если серьёзно, без затралливания абсолютного нуба (да ещё и в возрасте), какие у ржавого перспективы в вебе и какие есть фреймворки для этого дела? Спрашиваю не для вката в айти, но из любопытства.
>>2109658 Ещё как будет, в Книге используются только стдшные структуры для работы с Tcp, всё остальное пишется ручками. Но сервер очень простой, в таком впринципе не может быть ничего сложного.
Всё-равно не могу разобраться этим грёбаным хендлом в winapi Как мне объявить этот хендл и как мне его использовать в функции, чтобы это дерьмо заработало?
Я уже всё перепробовал let hToken : *mut HANDLE let hToken : mut HANDLE let hToken : &mut HANDLE let mut hToken : HANDLE
В самой функции тоже все возможные вариации со ссылками, с указателями, с волшебным словом mut и без него перепробовал. Эта курва никак не компилируется
В примерах к этому крейту тоже нихрена нет https://github.com/microsoft/windows-samples-rs Всякое простейшее говно показывают как делать, а базовые вещи (Сука дефолтные типы!) игнорируют. Какого хрена?
Здравствуйте. Как выучить Rust с нуля (знаний касательно программирования и языков нет вообще)? Клабник Стив книга "Программирование на Rust" "Если вы в программировании абсолютный новичок, то для начала прочтите введение в программирование". В книге этого "введения" нет. Как учить язык если книг для обучения с нуля нет? Ребят ну это какой то треш. /
>>2110392 Хоть бы описание на MSDN прочитал внимательно. >phToken >A pointer to a handle variable that receives a handle to a token that represents the specified user.
>>2108369 >Игр много, а основной доход в стиме с дроча людей на ачивки был, ну и с махинаций типа продажи ключей. Ну ахуеть, сделал игру для дропа говна и теперь говоришь, что можно нормально игры писать на чем угодно
>>2110493 Блять, а как пофиксил то? Че вы объяснить нормально то не можете просто пиздец. Неужели помогло let mut htoken и &mut htoken ? Просто охуеть бля.
>>2110765 Блядь, да нахуй они нужны? Ты если программировать на расте хочешь научится, то пиши на нем, а не книжки бля читай охуеть. Ты если плавать захочешь научится, тоже пойдешь книжки читать, а не идти плавать? Какие же зумеры дегенераты просто пиздец.
>>2111163 Я например даже на релизных билдах не стрипаю символы, чтобы при возникновении некоторых ошибок и всех паник захватывать читаемые стектрейсы. Конечно можно конечному юзеру отправлять бинарники без символов, а символы хранить отдельно на сервере и потом уже сопоставлять адреса функций и находить их названия, но это слишком геморройно для моих небольших программ (это уже надо делать полноценную инфраструктуру с крэш-репортерами и телеметрией).
>>2112376 То есть ты предлагаешь учить столетний сложнейший язык чей мануал занимает более 500 страниц, а потом чисто по твоим предположениям я смогу выучить раст? Это так не работает дружок. Если раст нельзя выучить с нуля значит он тыква.
>>2112375 >если знаний вообще нет Меня все время тянет на какую то экзотическую ебалу, в онлайн игрушках постоянно выбирал ебанутые классы, и потом дико страдал. Уже поковырял джаву, жс, но продолжаю заходить в тредик раста и пугать себя, что не смогу вкатится.
Как думаете, есть ли смысл вкатываться в нативную разработку на C/C++/Rust? Я студент, закончил 2 курс, поэтому мамкины борщи еще могу есть какое-то время. Стоит ли вкатываться в плюсы, если я хочу заниматься какой-нибудь графикой или хайлоадом с распределенными системами? Есть ли в этом вообще смысл или лучше пойти какой-нибудь го изучить и спокойно в вебе работать?
У вас там начальники в твиттерах заявляют, что системное программирование - это всегда о политике. И какой-то перец до кучи заявил, что использование С и С++ ущемляет права человека.
>>2113378 В Си сложно только то, что тебе велосипеды изобретать надо всегда, потому что в стандартной библиотеке нихуя нет. А так, все 3.5 конструкции языка учатся за 1-2 вечера.
ВОТ БЛЯТЬ ОБЪЯСНИТЕ КАКОГО ХУЯ У МЕНЯ ОДНА ЗАВИСИМОСТЬ ТЯНЕТ ЕЩЕ КАКУЮ-ТО ХУЙНЮ НА 1 ГИГАБАЙТ СУКА? НАХУЯ МНЕ 1 ГБ КАКОГО-ТО ГОВНА, ЧТОБЫ СКОМПИЛИТЬ 13 СТРОЧЕК КОДА?
>>2114255 Просто унификация. Не нравится — допиливай rustfmt.toml под себя. Вообще, пробелы намного лучше таба хотя бы потому что они во всех IDE одинаково показываются, а минусов относительно немного (там вроде бы только проблемы слабовидящих человеков с четыре чара vs один чар).
Открой какой-нибудь web-проект на C, где все пишут свои рандомы/таймеры/остальную хуету, а потом подумай, хочешь ли ты писать это говно руками каждый раз, или ты хочешь писать 13 строчек на расте.
Когда ты поймёшь, что все в мире ИТ это абстракции вокруг абстракций с целью упрощения, то тебе станет легче жить.
Но ты можешь всегда сам написать свой actix с минимум кода конечно же, правда времени у тебя займёт это...Можешь вообще сокеты открывать и "HTTP GET \r\n" запросы кидать аки лоулвл господин
>>2114480 Из официальных - Rust by example, чтобы чуток отполировать выученное. А дальше - в свободное плавание в том направлении, что больше интересует. Если ты ещё целиком The Book не прочитал, попробуй Programming Rust (2-е издание).
Вообще, книжки - это славно, но лучше с гитхаба настреляй всяких прожектов из интересующей сферы и копайся на здоровье.
>>2114485 >Там много ссылок на всякое. Да, я уже пару коротких прочитал оттуда. Просто было интересно, есть ли консенсус по второй книге, как есть по первой.
Как идиоматически инициализировать статик в начале рантайма, если нужно no_std, а спинлоки == антипаттерн? При этом дело происходит в библиотеке. Делаю демку на васме, нужна таблица синусов.
>>2115386 Может он имел в виду дебажить в том смысле, что через отладчик заходить внутрь макроса и построчно его выполнять (как это можно делать с функциями)?
>>2115387 Нет. Просто в Си, если в макросе случилась какая-то проблема, ты об этом уже никогда и не узнаешь, и мне хотелось узнать, есть ли похожая проблема в расте.
>>2115388 Ну в расте ты тоже не узнаешь, если макрос раскрылся в какую-нибудь хуйню. Раст только проверяет, что макрос успешно раскрылся и что подставленный код проходит все проверки компилятора (синтаксические борроу-чекер и т.п.), а вот от логических ошибок ты не защищён.
>>2115389 Я про то, когда ты запускаешь программу в отладчике там есть такая функция, как построчное выполнение. Т.е. после каждой строки отладчик приостанавливает выполнение и ты можешь посмотреть как изменились локальные переменные. В обычных функциях можно при подобном построчном выполнении заходить внутрь функций и построчно выполнять уже их. Вот я и интересуюсь, есть ли такая фича с макросами?
>>2115391 С процедурными макросами такое скорее всего не сработает. Хотя я знаю, что есть команда для карго, чтобы раскрыть все макросы, но там исходники превращаются в нечитаемый пиздец.
>>2115392 Локальные переменные никак не меняются, пока раскрываются макросы. Программа ещё работать не начинала даже. Как построчно меняются сами макросы можно посмотреть, выглядит это как на скриншоте выше.
>>2115393 >но там исходники превращаются в нечитаемый пиздец. Да, все println! придётся убирать пока, чтобы конечный продукт своих макросов посмотреть. Над выборочным раскрытием или игнором работают.
Макросы сильные, но их вовсе не обязательно использовать же. Тут не си, вполне можносделать функцию, которая посчитается при компиляции.
>>2115394 > Локальные переменные никак не меняются, пока раскрываются макросы. Ты совсем читать не умеешь? Я про отладку программы после компиляции. Чтобы вместо вызова huinya!(...) отлаживать реальный код, который подставился вместо неё. Насколько я знаю, ни одна IDE в расте такого не умеет.
>>2115395 > Чтобы вместо вызова huinya!(...) отлаживать реальный код, который подставился вместо неё. В смысле в дебаггере? Там и нет макросов же. там только реальный код и есть. Покажи скриншот, чего ты хочешь, если тебя мой скриншот не устроил?
>>2115398 Пикрил отладка. Сейчас никак невозможно отладить вызов huinya!(2), хотя раст анализер и может рекурсивно раскрыть его в отдельном окне (но для отладки он не доступен. Более сложные макросы раст-анализер даже раскрывать не может. Я бы хотел чтобы можно было отлаживать раскрытый вариант (как в окошке [EXPANSION].rs) вместо простого вызова макроса без пердолинга с ручным раскрытием и копипастом.
>>2115401 Ладно, я совершенно не понимаю идею того, что ты пытаешься добиться. Я думал, что ты хочешь отладить кодогенерацию, то есть чтобы макрос генерировал нужный текст. А ты о чём-то совсем другом. Возможно, поэтому такого и нет — никто пока такого не хотел.
Ты где-то в других местах встречал, чтобы работало, как тебе надо?
>>2115402 > Ладно, я совершенно не понимаю идею того, что ты пытаешься добиться. Потому что видимо никогда не писал сложные программ. С отладкой в расте вообще всё очень плохо. Даже без макросов претти-принтеры (когда переменная печатается в списке слева в читаемом виде) довольно убогие. > Ты где-то в других местах встречал, чтобы работало, как тебе надо? В тех языках, что я активно использую (жява, котлин, жс/тс) макросов как бы и нет. Но невозможность отлаживать сами внутренности макросов довольно отталкивает, потому что если автор макроса насрал себе в штаны или если ты макрос неправильно используешься, то готовься к длительным поискам, что же там сломалось.
>>2115403 >В тех языках, что я активно использую (жява, котлин, жс/тс) макросов как бы и нет. Так не пользуйся ими, никто ж не заставляет! Или ты println! дебажить планировал?
>>2115403 Всё языки, про которые ты говоришь, имеют рантайм. В крестах, сишке и расте рантайма нет, поэтому всякие построчные выполнения в этих языках реализуются через лютую боль.
>Потому что видимо никогда не писал сложные программ Мы пишем сложные программы, просто у нас в расте нормальная система типов и runtime с GC не срут за нас где не надо, поэтому доверия к коду больше, принтов под отладку обычно хватает. А если не хватает принтов, то есть всякие трейсинги.
>если автор макроса насрал себе в штаны или если ты макрос неправильно используешься, то готовься к длительным поискам, что же там сломалось Просто разверни макрос `cargo-expand`, потом подставь свои типы, а потом смотри реальную ошибку. Но у большинства публичных макросов нормальная документация.
>>2115712 >static mut — это дорога в ад: Я знаю, но у меня есть несколько позиций: 1. Я выполняю все контракты борроу чекера, просто компилятор об этом не знает 2. Это библиотека, то есть у меня нет мейна, чтобы каким-нибудь безопасным паттерном инициализировать её локально, и потом использовать 3. Спин локи — ещё большая дорога в ад. Там даже внимательное прочтение и проверка тебе может не помочь
>>2115909 Нет, всё равно не могу придумать, как мне это поможет. Это библиотека, в которой одна функция (go()) вызывается снова и снова для каждого кадра. Мне нужен статик, чтобы инициализировать и хранить лукап табличку за её пределами. Мне не нужен mut, если бы я мог инициализировать в начале программы и оставить, но я такого способа без спинлоков не нашёл.
>>2107844 (OP) Какие преимущества кроме производительности есть у Раста против Haskell, F# on .NET, OCaml, etc? Вчера попалось интервью Стива Клабника, члена кор тим Раста. Его внешний вид и повадки наводят на мысли, что Раст очередное поделие всяких извращенцев-педерастов из Калифорнии. Для меня это маркер идиотской идеи и реализации. Последние десятилетия ничего хорошего этими людьми создано не было. Да и что хорошего может создать безумный человек. Те кто продвигают менять пол однозначно безумны. Если кто не знает, все эти извращения пошли из Калифорнии.
Его бекраунд в программировании, он рельсовик, его мышление и речь, все это тоже не способствует вере в то, что Раст хорошо спроектированный язык, с правильной философией, адекватным сообществом и богатой продвинутой экосистемой.
Взглянув на Haskell я пришел к выводу, что это наиболее привлекательный на данный момент язык. Его создают настоящие ученые. В него не пихают все подряд. У него богатейшая и современнейшая экосистема. Он великолепно спроектирован. Он изящен и лаконичен. Он мощный и практичный. Хотел окунуться в Раст и сравнить, но после интервью Клабника не хочется. Он просто школьник против кор разработчиков Хаскела. К тому же похож на адепта ЛГБТ.
Есть еще великолепный .NET 5. Благо в нем есть F#, что почти тот же Haskell. Экосистема .NET 5 или .NET Core действительно хороша, даже сказал бы превосходна. C# конечно ужасен.
>>2117527 >>2117532 По существу есть что сказать? Я задал вопрос, ответить вам видимо нечем. Какие преимущества кроме производительности есть у Раста против Haskell, F# on .NET, OCaml, etc?
>>2117544 1. Производительность. 2. Мутабельность. 3. Ансейф не приходится писать на сях. 4. У нас exhaustiveness паттерн матчинга проверяется компилятором, а не автоматическое ДНО как в хачкеле.
Гаты скоро должны быть, так что чуть большая часть возможностей хачкельской системы типов скоро заедет в раст.
>>2117602 Это. Популярность раста обусловлена си-лайк синтаксисом. Языки с теми же целями, но с другим синтаксисом либо сдохли, либо о них никто не знает, что примерно тоже самое. >>2117544 У тебя в посте функциональные языки, а раст ближе к императивопараше, они не сравнимы.
>>2117553 >Мутабельность. >Ансейф не приходится писать на сях. >У нас exhaustiveness паттерн матчинга проверяется компилятором, а не автоматическое ДНО как в хачкеле. Ни одного аргумента в пользу Раста.
>>2117603 >Раст конпелируется в нативные модули для ноды. И что? Языки, которые я перечислил, имеют великолепные экосистемы, на них писать удобнее чем на ноде. Есть в ноде что то подобное ASP.NET Core, WebSharper, Ocsigen? Это модерновые веб-фреймворки, с их помощью можно писать веб даже без JS. Они богаче, они удобнее, они производительнее.
>>2117602 >программистам на С/С++ раст понять проще, и именно в эту нишу раст и целится Это я уже понял. Но он и позиционируется как язык для веб. А веб писать на низком уровне не очень удобно. Может есть какие то крутые сервера и фреймворки о которых я не знаю, которые позволяют удобно писать веб.
>>2117613 >У тебя в посте функциональные языки, а раст ближе к императивопараше, они не сравнимы. Ну почему же. На Расте можно писать в ФП парадигме.
>>2117622 >Ни одного аргумента в пользу Раста. Окей, у раста нет никаких плюсов по сравнению с хачкелем, не пиши на расте. Удачи жить в своём шизомире, а я пойду дальше писать на моём классном most loved lang.
Наканец-то можно будет избавится от кучи умных указателей в коде и использовать обычные ссылки с именованным временем жизни (потому что без гатов во многих случаях невозможно объяснить компилятору сколько времени на самом деле живёт ссылка, а использовать ансейф не хочется).
А вот когда добавят TAIT (там тоже вроде минимальную версию готовят к тестировании и стабилизации), то можно будет скрывать структуры прям как в моей любимой жявке - функции внутри трейтов вместо реальных структур будут отдавать opaque-структуры о которых известно только то, что они имплементируют определённый трейт/трейты. Сейчас такое можно либо с использованием умных указателей, либо только в свободных функциях: fn foo() -> impl Bar {...}
Анон, если ты совсем-совсем зелень в программировании (или вообще понятия об этом деле не имеешь), но хочешь учить раст, не начинай с The Book. Сначала посмотри Beginning Rust From Novice To Professional Карло Миланези.
Как мне отследить, что где-то там, в отдельной функции, я уже дропнул &mut на глобальный статик? Я могу что-то сделать, когда всю переменную дропаю через Drop trait, могу что-то сделать, когда заимствую через BorrowMut trait, а как мне что-то сделать, когда я дропаю &mut?
Пробовал impl<T> Drop for &mut MyStruct<T> но прилетает error[E0120]: the `Drop` trait may only be implemented for structs, enums, and unions
В моём варианте есть два способа передачи ссылок: (1) foo_1 использует impl трейты для автоматической ковертации ссылки в умный указатель, (2) foo_2 использует генерики. По сути оба способа одинаковы и выбор определённого вкусовщина (однако в первом способе невозможно будет указать точный тип ссылки, которая будет передаваться в функцию, но в этом случае оно и не нужен).
Плюс как ты видишь я вынес непосредственно работу с ссылкой в отдельную функцию real_foo. Это довольно важно, потому что как foo_1, так и foo_2 будут заинлайнены из-за того что используют генерики и если функция у тебя большая код от этого может сильно распухнуть. Потому весь код для работы со ссылкой лучше выносить в отдельную функцию, а в функциях с генериками по-минимуму проводить конвертацию аргументов в нужный вид.
>>2118524 Да, общий смысл я понял,и уже нашёл lock_api, теперь пытаюсь понять, как им пользоваться.
Спасибо за подсказки, но у меня, к сожалению, мейна нет и функции не могут принимать аргументы, а есть только статики, которыми я и ворочаю. Поэтому не так просто это всё организовать.
>>2118525 Я мейн использовал чисто чтобы показать результат работы при запуске программы. Смысл в том, чтобы вместо чистых ссылок функции принимали impl Into<MyPointer<'a, u32>>. Тогда функции спокойно продолжать принимать ссылки, но внутри функции ты их просто так использовать не сможешь и тебе сначала придётся конвертировать ссылку в умный указатель и потом оттуда уже и получить ссылку. Прикол умного указателя в том, что для него уже можно определить трейт Дроп, а значит и можно отследить когда он станет не нужным.
>>2118527 >рикол умного указателя в том, что для него уже можно определить трейт Дроп, а значит и можно отследить когда он станет не нужным. Да, это я понял из документации lock_api. Кто-нибудь пользовался им? Есть примеры кода?
>>2118490 Главный герой, умиротворенный своим вечным страданием, очищается и уходит в кресты. Его лучший друг становится врагом и умирает от передоза системой владения, все второстепенные персонажи также погибают.
>>2121600 Ну вот какая-то процедура файла возвращает >std::result::Result<&[u8], std::io::Error> Я не могу понять как мне обработать возвращаемое чтобы получить &[u8]. Я делаю так > let mut buf = reader.fill_buf(); пытаюсь что-то сделать с буфером и получаю mismatched types
expected slice `[u8]`, found enum `std::result::Result`
>>2121604 >Result<&[u8], std::io::Error> Это такая штука, которая возвращает либо Ok(&[u8]), либо Err(std::io::Error), соответственно, тебе надо достать значение из Ok(_). Это можно сделать несколькими способами. Можно сделать let mut buf = match reader.fill_buf() { Ok(val) => val, Err(_) => panic!, } Можно сделать if let.
Самый простой, но хрупкий, который стоит только во время разработки применять, а потом поменять, это просто добавить .unwrap() let mut buf = reader.fill_buf().unwrap() ;
У него есть улучшения, например unwrap_or(), unwrap_or_else(), expect(), про них отдельно можешь почитать.
>>2121606 >let mut buf = match reader.fill_buf() { >Ok(val) => val, >Err(_) => panic!, >} Так можно обрабатывать всё, что возвращает какой-то результат и какую-то ошибку?
И вот это >Ok(val) => val, не совсем понятно откуда берётся val. Если Ok(val), то mut buf будет &[u8] ?
>>2121612 >Так можно обрабатывать всё, что возвращает какой-то результат или какую-то ошибку? Так можно обрабатывать вообще всё, что возвращает какой-то из нескольких вариантов (так называемые enum)
>не совсем понятно откуда берётся val. Отсюда же и берётся. Ok(здесь ты пишешь произвольное имя переменной) => здесь это имя можно использовать
>Если Ok(val), то mut buf будет &[u8] ? Если внутри Ok(_) было &[u8], то будет &[u8].
Попытка писать что-либо без чтения растбука - просто тупо трата своего времени. >>2121626 Если ты используешь panic!, то почему бы сразу unwrap не писать. Проще же.
>>2121776 В первом случае ты заставляешь код, вызывающий эту функцию обработать ошибку, а во втором просто указываешь, что ошибка фатальна и обрабатывать её не нужно, а лучше завершить работу потока/программы (хотя отловить её таки можно).
>>2121828 Только вместо Err(err) => err, там Err(err) => err.into(), чтобы автоматом преобразовывать между разными типами ошибок. И в скором времени вопрос будет раскрываться по-другому, используя специальный трейт: https://github.com/rust-lang/rust/issues/84277
>>2121952 И как тогда мне прочитать и записать файл в одном скоупе? Читаю так
let file = match File::open(file) { Ok(v) => v, Err(_) => return, }; let mut reader = BufReader::with_capacity(MAX_SIZE, file); let mut buf = match reader.fill_buf() { Ok(v) => v.to_vec(), Err(_) => return, }; тут делаю реверс буфера и хочу записать его на то же место используя file.seek(SeekFrom::Start(0))
>>2121828 Насколько я помню знак вопроса делает ранний возврат из функции ЕСЛИ обнаружил Err. В противном случае просто достает из Ok значение. Удобно, чтобы самому ошибки не матчить.
>>2122040 Там по-моему была речь о том, что винда не сразу снимает эксклюзивный доступ после закрытия файла и потому если дропнуть файл открытый с эксклюзивным доступом и сразу же открыть его снова, то будет ошибка доступа.
>>2122150 > не могу проверить. Я проверил и у меня всё работает. Хотя я тоже помню, что кто-то жаловался на ошибку доступа при быстром открытии/закрытии. Но возможно ФС должна быть нагружена или ещё чего.
>>2122225 Она говорит, чтобы при успешной записи match ... возвращал пустой кортеж. Чтобы именно ничего не делать, используются фигурные скобки: Ok(_) => {} (т.е. при успехе выполнить пустой скоуп). Но прикол в том, что скоуп без возвращаемого значения тоже по-умолчанию возвращает пустой кортеж, а потому получается, что эти обе записи абсолютно идентичны.
В целом, конечно, прикольный язык, за день изучения я написал нужную мне программу. Хотя на го я бы потратил несколько часов, но мне нравится раст. А вот большое количество неявных вещей наоборот - не нравится.
>>2122337 Я пишу на питоне, иногда. Но не везде есть питон, не всегда питон подходит под задачу. >>2122346 >Пример неявной вещи. Ну вот например >>2121626
>>2122621 Зависит от того что делаешь. Иногда эта ошибка возникает есть берёшь ссылку на поле структуры и одновременно пытаешься работать с остальной структурой. Пока что в современном расте так делать низзя, но подвижки есть, чтобы разрешить.
for entry in WalkDir::new(".") { let n = match entry { Ok(v) => v, Err(_) => continue, }; let x = n.path().to_str().unwrap(); out.push(x); }
| 15 | let x = n.path().to_str().unwrap(); | ^ borrowed value does not live long enough 16 | out.push(x); | --- borrow later used here ... 22 | } | - `n` dropped here while still borrowed
Совершенно не понятно почему я не могу эту переменную использовать ниже.
>>2122649 Суть в том, что ты берёшь ссылку на внутренности n и засовываешь в out после чего n уничтожается по завершению итерации цикла. Тут либо в out надо засовывать копию строки, а не ссылку, либо перемещать сам n.
>>2122621 значит бороу чекер не знает не дропается ли значение раньше ссылки на значение, лайфтаймы юзать где возможно че еще или со ссылкми разберись может у тебя нул поинтеры висят после дропов.
>>2122693 Совершенно не понятно почему так и если я дальше использую x, то всё равно получаю does not live long enough.
for entry in WalkDir::new(".") { let n = match entry { Ok(v) => v, Err(_) => continue, }; let x = n.path().to_str().unwrap().to_string(); if is_dir(&x) { out.push(&x); <- тут } }
>>2122718 Ты пушишь ссылку на временный объект. Потому и выдаёт тебе ошибку. Объект уничтожается после окончания итерации и ссылка протухает. Потому и надо преобразовывать &str в String (т.е. ссылку на строку в строку, которой владеешь ты) и пушить саму строку в коллекцию.
>>2122741 Пфф, я то думал ты расскажешь нам как сложно в растовой функциональщине пробрасывать ошибки наверх итераторов, а ты просто с непривычки читать не можешь.
Бл*, как будто вкатунец после пары хелловорлдов пойдет писать сложный интерпретатор. Ето не так работает. Ты и с богатой std насрешь себе в штаны, если не понимаешь как работают функции из нее.
Даун-аутист итт, очень нравится язык, хочу изучить для себя разные приколы на нём (написание бота, который будет срать рандомными фразами, например), без цели в профессию, как хобби.
Так вот, я обломался уже на первой стадии - я не понимаю, как писать сам код, т.е. штука для писания письма (ЯП ранее не трогал, только с питоном баловался, так что извините моё невежество) не открывается. Что делать? >inb4 выкатываться в другой язык/нахуй
>>2122478 Ты дурак? Это "for _ in _" никогда не надо использовать, если можно использовать "for_each", а никак не наоборот. Достаточно просто понимать во что рассахаривается "for _ in _" и заимплементить хотя бы один итератор, чтобы понимать почему "for_each" лучше.
>>2122999 Если совсем никак не можешь поставить себе редактор кода, то на старте можно писать и в play.rust-lang.org Но без IDE писать на расте довольно сложно, так что я бы советовал тебе разобраться с rust-analyzer или IntelliJ.
>>2123032 Просто кто-то стрипнул символы. Или ты думал, что раст тебе бинарь просто по приколу раздувает?
>>2123112 > Это "for _ in _" никогда не надо использовать В его случае без for in не обойтись, если он вместо unwrap будет по-нормальному работать с ошибками.
Сап, ржавые. Вводные: в программировании полный профан, но зато неплохо знаю математику. Собственно, хочу научиться программировать и в качестве первого языка хотел выбрать раст, но прочитал в интернете такое мнение, что раст слишком сложный для вкатунов. Это правда? Может мне начать с чего попроще, а только потом уже перейти на раст?
>>2123792 Если ты хочешь упороться не в программирование, а в математику, то лучше хачкель или пистон. А если таки в программирование, то да, раст охуенный язык, но он решает конкретные проблемы крестовиков, а не какие-то глобальные проблемы программирования, как Alan lang, например, так что тут лучше не упарываться в раст, а смотреть от задач твоих.
Ку, ржавач Почему Раст до сих пор не вытеснил С++? Почему эти уёбки до сих пор пишут на небезопасном говне и жрут сегфолты и пополняют CVE пачками уязвимостей? Что не так с этим миром? По чесноку, что нужно расту для того, чтобы на него все тотально перешли и писали на нем системный софт? На нём И ТОЛЬКО БЛЯТЬ НА НЁМ???
>>2123949 Потому что нельзя так просто взять и переписать. К тому же кроме ошибок памяти есть и другие, которые компилятор раста не отловит. Старый код хоть как-то работает, а новый с нуля писать заебёшься, да и новые ошибки при переписывании могут всплыть. Если раст и внедряют, то таким образом, чтобы он мог менять существующий код частично. Плюс к вышесказанному есть проблема с совместимостью, потому что куча кода написана только для гцц и с ллвм не работает, растового а фронтенда для гцц пока нет.
>>2123965 >Потому что нельзя так просто взять и переписать 1. За 20-25 лет можно переписать ВЕСЬ существующий код и на С, и на С++ на чистый Раст. 2. Можно писать новый код для системного софта ТОЛЬКО на Расте, но тем не менее до сих пор большинство этого кода пишется на си и плюсах, какого хуя?? Люди любят жрать говно? Вселенский заговор? Раст объективно лучше плюсов по ВСЕМ параметрам, про си я вообще молчу, это не язык, а окаменелое недоразумение из-под мамонта. >К тому же кроме ошибок памяти есть и другие, которые компилятор раста не отловит 80% опасных с точки зрения безопасности багов в системном софте связаны с ошибками работы с памятью. Логические баги чрезвычайно редко практически никогда приводят к взлому софта, по крайней мере на системном уровне. >новые ошибки при переписывании могут всплыть Смотри предыдущий пункт. Корень всех проблем - ошибки работы с памятью. На расте пишут ОС без unsafe блоков. Более того, при желании на Расте unsafe вообще никогда и нигде можно не использовать, это просто костыль для бывших крестовиков. А если и приспичит, то можно будет все немногочисленные unsafe блоки штудировать десятки раз на наличие багов, ибо если и есть баг в работе с памятью, то он может быть только там, и то если разраб криворучка. Вне unsafe блоков Раст математически не может иметь багов, связанных с памятью, а про логические баги я уже упомянул выше. >Плюс к вышесказанному есть проблема с совместимостью, потому что куча кода написана только для гцц и с ллвм не работает, растового а фронтенда для гцц пока нет. Вода камень точит, короче говоря. Очень надеюсь, что через лет 20 мир избавится от юзлесс легаси говна в виде си и плюсов. Раст сделает этот мир лучше и безопаснее.
>>2123996 Дополню: тебе с дивана легко рассуждать. Ты вообще имеешь опыт серьезной разработки? Можешь по нормальному расписать чем раст лучше плюсов и почему всем нужно на него переходить? Не просто "всем лучше" или "тебе надо, ты и думай почему он лучше", а по-нормальному.
>>2124001 Тебе ответил другой анон, теперь отвечаю я, который выкатил пару паст выше в поддержку раста. У меня опыт 6 лет разработки на С++. Это говно ебаное, которое не стоит никакого внимания в 2021 году, когда есть современные языки программирования типа Раста, которые ГАРАНТИРУЮТ memory safety, будучи при этом компилируемым языком без проблем с производительностью. Почему Раст лучше плюсов. Очень просто - Раст имеет всё, что имеют плюсы, но вдобавок Раст безопасен. Причем безопасен и в многопоточности, а это прощай состояния гонки. 90% проектов можно писать без unsafe, даже целые ОС. Если Раст сдвинет плюсы, то количество CVE упадёт в ноль. Неужели все похуй и никто не хочет сделать мир безопаснее?
>>2123998 не мне надо, а всему миру надо! Даже майки и гугл начали это понимать и начали писать новый код на Расте. Да что уж там говорить, даже Торвальдс понял какой Раст охуенный и утвердил его использование в разработке модулей ядра для Линукса! Когда уже до остальных дойдет?
>>2124421 Аргументы или пошёл нахуй из треда. Я хотя бы аргументировал свою точку зрения, а ты только безаргументированно пукнул не по делу. И кто из нас тролль в этой ситуации? Явно не я.
>>2124478 Все равно я тебе не верю - не 80% ошибки работы с памятью, а 60. - полностью не устраняет состояния гонки, а только гонки по данным. Т.е. ты все равно можешь логический дедлок получить. - ОС без ансейфов не напишешь. Короче ты слишком жирно написал.
>>2124133 >У меня опыт 6 лет разработки на С++ >Раст имеет всё, что имеют плюсы Детектирую Qt-формошлёпа, который дальше кастрированного ООПа за 6 лет не ушел.
>>2124528 Ха! >не 80% ошибки работы с памятью, а 60. https://msrc-blog.microsoft.com/2019/07/18/we-need-a-safer-systems-programming-language/ И пикрилейтед. А также взгляни на все CVE, где балл CVSS 7.5 и выше. Из критических уязвимостей критическая == позволяет исполнить произвольный код от лица уязвимого процесса почти 100% - это ошибки работы с памятью. >полностью не устраняет состояния гонки, а только гонки по данным Как раз data race и является потенциально опасной ситуацией с точки зрения безопасности. Это единственный эксплуатабельный вид состояния гонки, все остальное - максмум denial of service. >логический дедлок совершенно безобидная вещь с точки зрения безопасности, особенно если такой баг есть в программе в пространстве пользователя, которую запускает какой-нибудь форк сервер. В ядре - проблематичнее, но опять же - это только DoS, исполнить произвольный код будет нереально. >ОС без ансейфов не напишешь. Чекай Redox OS и попробуй в их кодовой базе нагрепать ансейф блоки, лол. Да даже если и будут ансейф блоки, весь цикл тестирования будет сосредоточен на них, плюс это можно на изи обернуть в безопасные обертки. В случае с сиговном у тебя 100% кодовой базы - это потенциальный UB.
>>2124866 Ты попытался меня обосрать, но забыл снять штаны и жидко оподливился себе под хвост :shrugs:
Все последние 6 лет пишу RT embedded софт в индустрии автономных машин не в странах СНГ ясен-красен, а в США и непосредственно принимал участие в разработке кастомной RTOS с кодовой базой 8 миллионов LoC. Как опытный С++ разраб заявляю ещё раз, что в 2021 году есть гораздо более перспективные языки для более продуктивной и безопасной разработки системного софта. И да, это намёк на Раст. Если он не взлетит, я потеряю веру в человечество, потому что не писать на нём в 2021 - это быть ушлым консерватором и похуистом по поводу того, что во всем системном софте в мире имеются куча дыр из-за С/С++ говна, на котором категорически невозможно писать memory-safe код во всех случаях.
>>2124929 Утечка памяти безобидна с точки зрения безопасности. Если ты криворукий еблан, то программа просто будет медленно пожирать оперативку, пока не крашнется, но больше ты ничего сделать не сможешь. К исполнению произвольного кода это никак не приведёт.
>>2125950 Ничего плохого если ты хороший кодер, но у людей сразу триггер из-за названия. Знаешь про драму вокруг владельца Actix Web? Он часто использовал unsafe и ей захейтили так, что он забросил проект, но щас всё норм, целая драма на ютубе из-за этого. Он прокоментировал что-то вроде петухоны и джсеры считают, что я недостаточно знаю язык, чтобы использовать unsafe конструкцию
Actix кстати самый быстрый фреймворк на планете, быстрее с и с++
>>2125974 Не нужен С\С++, он держится за счёт легаси только. Учи Раст с нуля, если так хочешь. С\С++ значит можно советовать новичку, а Раст нельзя, да? Тут просто предупреждают что будет сложно, на самом деле Раст изичная хуита, много времени уходит просто на исследование синтаксиса, но нет моментов, что ты остановился и всё.
>>2125960 > но щас всё норм Щас там все эти ансейфы за которые его хейтили убрали без потери производительности. Правда есть один недостаток у актикса - он не отдаёт память которую забирает для кэшей: https://github.com/actix/actix-web/issues/2075 Не совсем утечка памяти, но всё равно неприятно, что при одном большом запросе актикс сожрёт всю память и не отдаст её.
Начал копать раст, наткнулся на оффсайте раста пример с использованием крейта ferris_says. ( как я понимаю, всем известная штука, раз на самой почти первой странице приведен в качестве примера) Этот крейт выводит на стандартный вывод аскии картинку в виде краба, говорящего строку, указанную на вход (условно). Начал смотреть исходник, а там, помимо краба, есть еще отрисованная скрепка. Так вот вопрос: как вывести эту скрепку вместо краба?
>>2126495 Правда это касается только веб-сокетов ("утечка" происходит в рамках одного соединения веб-сокета и при его закрытии вся память возвращается), но всё равно неприятно.
>>2126534 Раньше экстерн крейт использовался чтобы указать расту что этот крейт будет использоваться дальше по коду, а затем ты из него импортировал юзом элементы. Сейчас (начиная с 2018 эдишна) экстерн крейт нужен только для импорта некоторых макросов.
Читаю в книге про умные указатели. На пике пример вершины графа с Weak ссылкой на родителя. Мотивируют это следующим образом: если родительский узел удаляется, его дочерние узлы также должны быть удалены/если мы удаляем дочерний узел то родительский элемент все равно должен существовать. В следующем примере родителя помещают в скоуп где он дропается, но дочерний узел выживает. Можете подсказать, почему так?
>>2129187 > Можете подсказать, почему так? В твоём примере должно быть видно, почему. Потому что родительский узел, это не единственная сильная ссылка на дочерний узел. Пока сильные ссылки есть, узел будет жить.
>>2129963 >>2129964 Ну я имел в виду, что Го это не системный язык, а С++ это дефинишен системного языка. Например в говне нет работы с памятью и тредами напрямую, но при этом язык компилируемый с нативными типами и т.д. Собсна в этом и вопрос.
>>2130204 У Visual Studio __restrict, а у clang уже __restrict__ Понимаешь, к чему я клоню? К тому, что без поддержки стандартом у тебя нет абсолютно никакой гарантии
Здравствуйте. Как выучить Rust с нуля (знаний касательно программирования и языков нет вообще)? Клабник Стив книга "Программирование на Rust" "Если вы в программировании абсолютный новичок, то для начала прочтите введение в программирование". В книге этого "введения" нет. Что я должен прочитать? У этого языка нет будущего если он настолько недружелюбен.
>>2130697 Привет. Художник рисует не потому что он хочет денег. Программирование это творчество. Хочу писать код для себя, но не понимаю как изучать этот новый прогрессивный язык. У него ведь нет будущего с таким подходом.
>>2130697 "Rust Язык, позволяющий каждому создавать надёжное и эффективное программное обеспечение Сайт говорит что каждый может создавать надежное и эффективное программное обеспечение на нем. Вот я хочу этим заняться. Только как?
>>2130708 Ты хочешь стать хирургом и оперировать. Сразу разрезать человека и оперировать нельзя - он умрет и ты ничего не понимаешь. Открываешь книгу по хирургии , но что бы ее понять нужна база. Говорят читайте введение в медицину. Что скрывается под этими словами неизвестно. Книг с таким названием нет. Что делать?
>>2130715 Ты читать-то пробовал книгу? Там для даунов все расписано что и зачем делать. >>2130717 > Ты хочешь стать хирургом и оперировать. Для этого есть аттестация, чтобы отсеять ноускилов. Для погромирования такого нет, потому что цена ошибки минимальна.
>>2130682 Как тебе уже выше советовали, начни с СИ. Либо, если ты хочешь научиться программировать, а не писать полнейшую ебень уровня yanderedev, то начни с БАЗЫ(архитектура ЭВМ, ОС, сети и т.д). Все таки rust - это системный язык, поэтому общее понимание этих вещей должно быть. Чтобы тебе пол жизни не читать труды Танненбаума и прочих великих людей, в качестве БАЗЫ я предлагаю тебе трехтомник Столярова. Это очень своеобразный персонаж, его есть за что критиковать(за его высказывания о современном вебе многие его вообще шизом считают), НО в своей области он разбирается очень хорошо и может чему-то научить. Пусть сайт тебя не пугает: http://www.stolyarov.info/books/programming_intro/e2 После освоения БАЗЫ можешь смело перейти на раст и писать свои проекты. Ну а если тебе вообще похуй, что ты делаешь, то послушай анонов выше и начинай говнокодить уже сейчас.
>>2130721 Ты не программист. Столярова и я загуглить смог. Вот я знаю русский. Хочу выучить английский, но для этого мне нужно учить персидский? Это бред.
>>2130726 Ты неправильно аналогию поставил. Си - это как раз английский в мире программирования. В твоём случае ты знаешь русский и тебе нужно выучить персидский. Да, для этого хоть и не необходимо не ебу, есть ли учебники по персидскому на русском, но желательно сначала выучить английский.
>>2130733 Покинь тред. Ты не программист, а лишь тролль. >>2130742 Нет правильно. Си старый как говно мамонта язык, небезопасный и устаревший. Там процедурное программирование дядя, а в расте ооп. Тут 2 варианта. Учить сразу с++ и кодить на нем забивая попутно на раст либо по нормальному выучить раст с нуля.
>>2130867 Впервые создан современный язык, на котором ты можешь написать все. Представь, больше нет потребности в выборе того или иного языка, мол, "сегодня я пишу на питоне, а завтра под эту задачу выберу го, а на выходные я буду настраивать гарбейдж каллектор в жабе!!!". Ты только представь, тебе не надо больше писать на кривом го эти бесконечные ерорки! Не надо выравнивать копипасты со стековерфлоу в питоне! Тебе не надо пролистывать сотни тысяч полупустых классов на джаве, чтобы добраться до бизнеслогики. Блин, тебе даже не нужно переписывать калбэки в промисы, а потом в асинки на жопоскрипте!!! Тебе не нужно бороться с GIL, тебе не нужно просить друга установить сраную жабо-питоно-нода-машину, чтобы он посмотрел твою хеллоувордик!
ВСЕ!!! Закончилась эпоха кустарных языков в ИТ, да здравствует промышленная АЙТИ революция!!!!
Вот скажи, нафиг тебе какая-то оплата, когда ты находишься в грандиозном историческом моменте времени и можешь прикоснуться к великому первым??
>>2131274 Можно до определённой степени имитировать трейтами. Но да без аналога абстрактных классов ООП уровня жяв, с++ и подобных языков реализовать не получится.
>>2131288 В кокотлине тоже по дефолту все классы финальные. ООП на практике провалилось. Сейчас в мире джавы даже принят такой процедурный подход, когда у тебя есть тонкие данные и рядом сервисы, которые не имеют состояния (что это, как не структуры и набор функций).
>>2131303 Хз, ООП сектанты все еще продолжают клепать "идиоматичное" ооп на джаве и шарпах, по крайней мере на моем опыте. Старую собаку новым трюкам не обучить.
Что-то меня модули прям разочаровали. Сначала нефига не понял (читая Раст Бук). Потом пошел в инет и вроде как понял, но офигел от такого сколько надо бойлеплейта писать в */mod.rs. Просто вот вечная какая-то беда с языками. Читаешь, читаешь все логично и правильно и потом бац! И какашка! Огромная, мерзкая вонючая какаха! Ну как так, зачем?? Открыл сорцы и действительно пишут этот бойлерплейт с mod и use.
>>2132147 Видимо он хочет чтобы pub работал как pub(crate), модуль импортировался не при помощи mod abcd; в коде, а по факту существования файла и по-умолчанию модуль экспортировал весь pub-контент из подмодулей. Тогда действительно ничего кроме импортов писать не надо.
>>2132154 > по-умолчанию модуль экспортировал весь pub-контент из подмодулей Хотя впрочем оно и сейчас так работает. Реэкспорт делают чтобы вместо use foo::bar::baz::huinya; писать что-то вроде use foo::huinya;
>>2132147 Да обычные импорты по пути /src/dir1/dir2/sub_module.rs /src/sub_file.rs
use ProjectName::dir1::dir2::sub_module::SomeScruct use ProjectName::sub_file::some_function
если имя пакета совпадает из зависимостями, сделать конструкцию типа use Path as PathOther use PathOther::Rnd::get_num
Сделать все что в текущей папке доступно всем локально (на уровне пакета), а то что выше через pub. Получиться что папка пакета будет представлять нечто типа API с публичным набором, а все кишки внутри спрятаны (через свой pub). Ну или вообще не париться и отказаться от этого каскада, на просто на месте помечать pub.
>>2132174 Зачем?? Чтобы можно было работать только с "правильной" ide, а сам пути не мог найти? Все равно так или иначе упирается в пути и их используют. Что там победили то?
>>2132144 С растом всегда так. Сначала смотришь - вроде и синтаксис хороший, и завезли красивые "функциональные" (сорт оф) фичи. И типа безопасный язык. И нет бумерского ооп говна из цпп. А начинаешь копать глубже - борроу чекер вставляет колеса там, где оно совсем не нужно. Куча бойлерплейта с лайфтаймами и трейтами. Неинтуитивная система модулей и не тривиальная сложность в имплементации простейших структур данных, таких как графы и связанные списки (с zero overhead, то есть без cell и тем более refcell). Идея с борроу чекером отличная, но имплементация оставляет желать лучшего, потому что на текущий момент он защищает только от самых тривиальных проблем.
>>2132328 > борроу чекер вставляет колеса там, где оно совсем не нужно. Самый крупный недостаток из современного борроу чекера исправят в 2021 эдишне: https://github.com/rust-lang/rust/issues/88126 Правда ценой увеличения размера некоторых замыканий. В остальном вкусовщина. Те же "простейшие структуры данных" в реальном коде ты никогда не пишешь.
>>2132196 >Зачем? Как минимум потому что файловой системы может вообще не быть. Или чтобы можно было менять логистику проекта независимо от логики, когда большой mod{} просто перемещаешь в отдельный файл, ничего не меняя в коде. Потом делаешь его отдельной директорией, а содержимое перемещаешь в mod.rs. Независимость внутренней структуры программы от внешней структуры исходных кодов — это хорошо, или ты не согласен? Конкретно можешь почитать в обсуждениях rfc. Там всегда первый аргумент "подумайте о новичках!", как "подумайте о детях!", что я нахожу забавным.
>а сам пути не мог найти? Покажи пример, где ты не смог путь найти?
>Все равно так или иначе упирается в пути и их используют. Что там победили то? Например, можно все .rs запихать в один файл тупым рекурсивным скриптом, который просто содержимое всех файлов оборачивает в mod <название>{} и оно будет работать без изменений.
>>2132328 >и не тривиальная сложность в имплементации простейших структур данных, таких как графы и связанные списки (с zero overhead, то есть без cell и тем более refcell) Если ты знаешь как тривиально и безопасно имплементировать с zero overhead простейшие структуры данных в других языках, то просто пишешь unsafe{} и имплементируешь их. "Умные" инструменты раста могут не всё, это никакой не сюрприз, поэтому тебе и предоставлены глупые инструменты, при работе с которыми умным придётся быть тебе.
>>2132430 Я открыл сорцы на гитхабе и увидел тонну бойлерплейта в mods.rs. Самое смешное, что это нечто похожее на импорты в питоне. Я даже по началу испугался что есть циклический импорт (но вроде сказали что нет).
Проблема всего этого было не васянстве такой системы, а в том, что нормально это нигде не написано. Мол "mod" описывает модуль, а если без тела он !!!!импортирует. И это я смог узнать только прочитав статью от человека, который тоже на этом месте запнулся.
>Как минимум потому что файловой системы может вообще не быть Пруфы можно? Просто вероятно если нет файловой системы, то весь код будет написан явно вне этой системы и в последующем как-то интегрирован одним бинарем. Что как бы нивелирует всю твою идею.
>Например, можно все .rs запихать в один файл тупым рекурсивным скриптом Зачем? Это демонстрация из серии "смотри как могу" или что? Все что я видел на гитхабе, все это завязано на путях. Да и как бы хер бы с этими путями, самый шлак это писанина в mod.rs
>>2132328 У меня уже тоже стала закрадываться идея о некой "сырости" раста. Я думал весь хейт был связан с бородатыми плюсовиками, которые бояться за свои места и не хотят переучиваться. Но в реале чет не все так радужно.
Не то чтобы я ныл с синдромом утенка, но вот от системного языка хочется увидеть отполированный дизайн без васянства (мы художники, мы так видим).
Попробую, конечно, осилить доку. Но чувствую что будут ждать какой-нибудь выпук от МС, который на фоне проб и ошибок раста выплюнет годноту. Что, что, а МС умеет дизайнить языки
1) Мне вот без хейта интересно как решается проблема с одинаковыми именами пакето и крейтов use Some::something:: use Some::other:: Ну, типа в жабе есть приписки к доменам, а тут как это победили?
2) Есть ли возможность подключить одну и ту же библиотеку разных версий? То еще васянство, знаю, но все же. Мало ли я там постепенно переписываю часть кода под новую версию либы
>>2132477 Друг, ну, ты не понял, хорошо. Но ты уверен, что если ты не понял, то это надо поменять? Ты так ко всему подходишь?
>>2132520 >Мне вот без хейта интересно как решается проблема с одинаковыми именами пакето и крейтов Не бывает крейтов с одинаковыми именами, индекс crates.io глобальный. Если ты свой крейт назвал так же, как существующий, то придётся переименовать. Такое вот решение, со своими преимуществами и недостатками.
>>2132583 >Друг, ну, ты не понял, хорошо. Но ты уверен, что если ты не понял, то это надо поменять? Ты так ко всему подходишь? Понимаешь, от системного языка я чаще жду что-то типа "мы сделали так, потому что по другому не смогли и вот тебе причина, живи с этим...". В любом случае ты осознаешь что ты на системном языке и ты готовишься к неизбежному бойлерплейту и так, потому что знаешь такова цена отсутствия абстракций. И тут блин, ты видишь, что просто копируют не самую лучшую модель пакетов из питона. Ты осознаешь, что люди просто не старались, они создали бойлерплейт на ровном месте, в таком языке, где этому большая цена. Я не люблю художников, мне не надо красиво, мне надо удобно.
>Не бывает крейтов с одинаковыми именами То есть, я не могу сделать себе локальное хранилище своих крейтов? Мне надо будет свой код всегда публиковать? Очень интересное решение, на моей работе всем бы это "понравилось", мы любим хранить свой код на внешних серверах публично (рили опять васянство??).
>>2132623 >Понимаешь, от системного языка я чаще жду что-то типа "мы сделали так, потому что по другому не смогли и вот тебе причина, живи с этим...". Весь процесс принятия решений открытый и решения расписаны в rfc. Что тебе ещё не хватает? Ссылки? Вот ссылка https://github.com/rust-lang/rfcs Все решения с 2014 года там.
>бойлерплейту >бойлерплейт Не хочешь изолировать, то пиши всё в одном глобальном неймспейсе, там всё всем доступно. Никто ж не заставляет на модули разбивать.
>То есть, я не могу сделать себе локальное хранилище своих крейтов? Мне надо будет свой код всегда публиковать? Где ты это прочитал? Я там такого не писал.
>>2132638 Там же тебе и ответ расписали. Попробую по-медленней: -Системный язык более подвержен бойлерплейту за счет отсутствия многих абстракций. -Значит системный ЯП более чувствителен к плохому дизайну. То есть, нет возможности навернуть абстракцию, которая за некую стоимость ресурсов пофиксила бы что-то.
Например плохой дизайн засунуть сырой поток байт и потом назвать это строкой (как в го и вроде в расте так же). Теперь всегда чтобы работать с позициями юникода нужно будет переводить в руны (нормальную последовательность из юникод элементов), что не бесплатно.
>>2132649 Не знаю, дядя не может нам объяснить как построено решения конфликтов имен в расте. Сначала он говорит что надо как-то завязаться сайт, но потом вроде как и не надо (несет невнятную фигню). Вероятно дядя сам не знает и уже просто маневрирует.
>>2132683 Когда же хоть кто-нибудь уже изобретет препроцессор, чтобы не повторять код. А то бедным программистам не под силу читать много букв, а сделать препроцессор сами для своей задачи у них лапки. Как это они что ли код должны будут писать, а не просто вызвать стандартные функции? Мимо
>>2132683 Это мир гуманитарных-программистов. Они экономят на строках, но потом выплевывают "хеллоу ворд" в 2-4 мегабайта. Это безумие уже не остановить.
[joke_mode] Сейчас пацаны из Имперского Колледжа Лондона запилят Verona, так что всем кто участвовал в эксперименте раста, отдельное спасибо, все свободны.
>>2132789 >verona самое худшее, что можно придумать. вместо запила новых языков с новыми концепциями и улучшения старых. будут переизобретать одни и те же. микрософт дропнул уже дохуя интересных исследовательских языков, почему он не дропнет эту пародию на раст. действительно, вместо работы над растом будут пилить недораст. >эксперименте раста раст это не экспериментальный язык
>>2132915 Вообще-то там исследование и конкретно исследуют улучшенную концепцию раста (множественное владение) в условиях конкаренси (ну еще что-то там из языка пони и циклона) и вроде с интеропом С++.
Хочу ли я лично чтобы это переросло в новый язык программирования - конечно. Что в этом плохого, когда есть несколько концепций? Тем более умные люди из МС умеют дизайнить языки.
Ну и у МС есть ресурсы чтобы такое делать. Искренне уже надоело, когда сейчас чуть ли не каждый высирает очередные поделие. Типа на те, пилите дальше сами, "мы шмогли" (и то где-то половину синтаксиса, а остальное просто нагадили в торопях)!
>>2133010 Да, почитал о нём. На раст он кстати не похож, но довольно интересно там даже есть анонимные? конструкторы >value: (iso & Value) | (None & imm); и variadics >length[T...](x: T...): USize >>2133010 только экспериментальные наработки мс мало где используются, кроме F* который заюзали для mitls и всё. >очередные поделие В этом и был поинт, всё чаще выходят языки типа vale, vlang, hare, etc, которые вроде не предлагают безопасность, но пытаются копировать раст, не понимая сути безопасности раста.
>>2133185 >Обновлять пекарню, очевидно же. Ну или хотя бы просто добавить памяти. Неужели 16гигабайтов ОЗУ для компиляции эмулятора терминала в 2021 году мало?
>>2133193 Там 32гигов уже для компиляции хрома мало. Особенно если используешь какой-нибудь LTO (который можешь попробовать выключить, у раста по-умолчанию включена лайт-версия - thinLTO).
>>2133178 UPD: Проблему с памятью решил, поигравшись с настройками системы. Теперь новая хуйня появилась fatal runtime error: Rust cannot catch foreign exceptions thread
>>2133195 >Там 32гигов уже для компиляции хрома мало. ИТ, 2021. Итоги. Я вроде бы не хром собираю... Пиздец, почему так быстро требования к железу растут?
>>2133216 Вот смотри, я алакрити на опенке собираю. Алгоритм действий, примерно, такой: git clone github/foobar-project.git => cd foobar-project => cargo build --release. Под конец проблема с glutin и линковкой.
>>2132789 Чисто вот с позиции "а что, а вдруг", как считаешь, какая основная парадигма может быть у Вероны? Навернут побольше функционалочки, если даже Святой Кармак за неё топит?
>>2133223 Я навернул только ту инфу, которая была общедоступна (не осилю я сорцы). Вероятно хотят упростить раст и скрестить с конкурентностью (не удивлюсь что пытаются под копот убрать как в го асинки).
Когда инженера комментировали раст, они там так сказали, мол в целом раст их устраивает. И в таком ответе можно уловить две нотки.
1) Раст имеет "фатальный недостаток" (читай на лурке), то есть, он принадлежит не им! И вот сейчас они что-то пилят, но это что-то должно выйти с какими-то плюшками, которые подкупят нового обывателя (нельзя просто сделать второй раст).
2) Либо раст хорош, но имеет какие-то нюансы, которые правда не устраивают инженеров, но идея их зацепила и типа пилят исследуют как сделать лучше.
А еще я нарыл какую-то инфу про новый язык НЕ структурного программирования "bosque". Не удивлюсь если мы увидим новый "раст" в новой парадигме кодинга, да еще в стиле тайпскрипта (как bosque).
>>2133256 Плюшка в технических возможностях языка. Мое имхо - исследуют как сделать проще владение, рассчитанного на среднего программиста и исследуют возможность как спрятать конкаренси под капот (это делает его использование проще некуда).
Возможно результат исследование будет таким, что и раст себе на вооружение возьмет. Или ничего не получиться.