Добро пожаловать в тред, посвященный гарантиям, обещаниям, владению, заимствованию и другим концепциям языка Rust! Предыдущий тред : >>3371041 (OP)
Rust — blazing fast язык для системного программирования без segfault'ов и с гарантиями потокобезопасности. Он позволяет писать безопасный и эффективный код, который легко поддерживать и масштабировать.
В этом треде мы объясняем базовые и продвинутые концепции языка, а также программирования в целом. Поможем новичкам, подскажем, что выбрать для веба, игр или, прости господи, блокчейна.
Кстати про работу: сделал тестовое, сказали что нравится и спросили желаемую зепку. Назвал 1800. Сказали мы вам перезвоним. Я охуел просить столько на джуновскую вакуху не имея почти никакого коммерческого опыта на няшном растике? Вакансия была на позицию бэкенд-макаки.
>>3407697 (OP) > Добро пожаловать в тред, посвященный гарантиям, обещаниям, владению Блять, каким обещаниям? Надо было "контрактам" написать. Ладно, в следующий раз.
Как же долго раст компилируется, это пизда. Со всеми опциями оптимизации можно я даже не знаю... сходить сготовить еду например. Реально ооооооооооооочень долго. Ждать когда он это всё высрет. Как будто код везут на слепых лошадях из Воркуты в Москву.
>>3412845 >компилируется В 2020 линковщик оче долго работал, даже была эксперементальная замена ему, продолжаю охуевать от растодебилов, прошла практически половина десятилетия, до сих пор ничего не изменилось.
>>3412845 У меня есть личный проект, где на основе пользовательской конфигурации, нужно было генерировать персональный бек и клиент, все это дело собиралось в джокере. Условно говоря, пользователь выбирает нужную функциональность, генерируется конфиг, на основе конфига билдятся бек и клиент, все это разворачивается в облаке. Так вот первым кандидатом для меня был раст, учитывая, что бек в моем случае по сути являлся обычным недопропрокси. Но из-за петушиной по длительности сборки сразу пришлось отказаться от этой затеи. По итогу выбрал Говно, которое билдится за считанные секунды и не приносит такой попаболи.
>вебговно Буквально требуется принимать бинарный пакет, парсить его и пересылать данные на клиент. Да и в чем претензия? Инструментов для вебговна на расте написано больше, чем для системной разработки и байтоебства, что довольно иронично.
>Сразу почему не выбрал, экспертизы не хватило Потому что язык без ГЦ и милипиздрическими бинарниками лучше языка с ГЦ, рантаймом и жирным бинарем? У меня почти 3 контейнера с растоверсией недопрокси весили столько же как один гошный.
>>3412884 Да он бля будет полчаса-час компилиться. У меня в облаке 4 cpu + 16 gb ram одна сборка идёт около часа (!). В принципе наверно ты правильно сделал. Я последовал совету rust guide'а, они типа пишут, мол просто добавьте workspace и всё будет чотка. Ну я добавил. Он теперь в два раза дольше компилит с воркспейсами лол. И вообще, я заметил - он иногда дублирует зависимости. Допустим берёт tokio-rustls компилирует v0.24.1 версии и v0.26.2. Дальше он компилирует tower версии v0.4.13 и версии v0.5.2. Может поэтому долго, я пока ещё этому кунгфу с зависимостями не научился.
>>3412927 Раньше я этой хуйни не замечал. То есть было в районе 100 зависимостей и он собирался быстро. Теперь по мере роста проекта, чтобы только один бинарник скомпилить - их уже штук 500. Ну и плюс, он не может больше одного ядра использовать из-за настроек оптимизации. Такие дела.
>>3413654 Напишите такой же аналоговнет на расте Замечание: 1) строка 1 - определяем рекурсивно тип 2) строка 2 - содаем циклическую структуру (сама на себя ссылается) 3) строка 8 - рекурсивно печатаем содержимое поля a
Заодно ответе на вопрос. Зачем вар боров чекер если вы не линукс хакеры? Чем вам сборщик мусора мешает в голенге? В голенге выразительности нет? Возьмите окамел. Синтаксис - руст на максималках, а ебли с боровчекерами и тамлайфами нет
>>3413681 Во первых зачем мне это делать, во вторых что ты вобще скинул, в третих какое отношение к вебу > определяем рекурсивно тип это что такое и какого она размера?
>>3413716 размер Option<x> равен размеру x + 4 байта Если ты делаешь struct x { inner Option<x>}, то она имеет бесконечный размер sizeof x = sizeof inner = sizeof x + 4
>>3413717 1) Так я попросил аналоговнет на расте потому. Свой пример я скомпилировал и запустил. Он работает из-за TCO а не вываливается в переполнение стека 2) Конкретно окамел я сам только штудирую
>>3413729 Не тоже самое. У тебя нет циклических ссылок, а только рекурсивно определеная структура. Недавно компилятор тайпскрипта переписали на голенг, а не раст, по тому что в расте трудно с циклическимими ссылками работать. Одна из причин называлась. PS я не расто хейтер если чо
>>3413739 Ну как не видишь? У тебя печататет Hello world 2 3 А у меня печатает бесконечную портяку из 1 2 3 В сишке ты тоже можешь создать три указателя на три структуры и зациклить их в круговую. Это не займет кучу памяти
>>3413768 >Потому что хачкель академический язык, а в окамле есть все, хоть и местами устаревшее. Ну как будто бы хачкель более распространен, тот же pandoc, например, или grease. А ocaml только в контексте jane steet вспоминается.
>>3413689 Никаких сложностей с борров чекером нет. Кто память руками чистил борров чекеров не боится. Проблемы только у залетевших питонистов/жсеров и прочих, которые только в расте про указатели узнали.
>>3413654 То есть то, что программы надо писать с буквально единственным явным владельцем у любого объекта - это не большая проблема? Или ты любой объект всегда клонируешь при передаче? >посмотри как веб на плюсах\си выглядит Сорян, но я не дебил, чтобы на СИСТЕМНОМ языке писать веб дерьмо.
>>3414083 >единственным явным владельцем у любого объекта сильно удивишься если узнаешь что в расте это не обязательное условие? раст бук пролистай на досуге, может хоть позориться в расто треде не будешь больше
>>3414873 Никакие списки, кроме тех, которые юзаются во всякой лок-фри хуйне, нахуй не нужны. В этом плане этот список ничем не хуже любого другого из стандартных либ.
>>3415915 Да каво ты блять спрашиваешь, он сам нихуя не знает. Он даже не пытается как-то аргументировать свой ответ. Rust для микроконтроллеров норм! Бери embassy и делай че хочешь. В смысле, что за вопрос такой "норм или не норм". Ты думаешь что проблема всегда в плохих языках, а не в кривых руках из жопы которые нихуя не умеют программировать?
> Rust does not support function overloading, which means you cannot have multiple functions with the same name that differ only in their parameter types or count.
>>3413731 >Недавно компилятор тайпскрипта переписали на голенг, а не раст, по тому что в расте трудно с циклическимими ссылками работать
немного по-другому же >Перед началом работы над проектом разработчики изучили возможность использования различных языков программирования и поэкспериментировали с прототипами на разных языках. В итоге для создания нового компилятора был выбран язык Go, как оптимальный вариант для выполнения работы по переписыванию кодовой базы старого компилятора. По сравнению с такими языками, как Rust, Go ближе к TypeScript по семантике и структуре кода, что позволяет сохранить при портировании существующие шаблоны. Использование Go упрощает перенос изменений между кодовыми базами и снижает трудоёмкость задачи по сопровождению старого и нового вариантов бок о бок.
>Язык Go обеспечивает хорошую производительность, развивается с оглядкой на многопоточное программирование и эффективную работу на многоядерных системах, имеет встроенные средства защиты от проблем при работе с памятью. Ценой безопасной работы с памятью является сборщик мусора, который может приводить к появлению задержек во время работы, но для компилятора появление таких задержек не имеет значения.
>В качестве варианта рассматривались и другие языки, такие как Rust, но они слишком сильно концептуально отличаются от TypeScript и при их использовании портирование превратилось бы в разработку компилятора с нуля, при которой было бы трудно добиться полной совместимости со старым компилятором, пришлось бы заново решать уже решённые в старой кодовой базе проблемы и проект потребовал бы значительно больше времени и ресурсов.
The TypeScript compiler's move to Go was influenced by specific technical requirements, such as the need for structural compatibility with the existing JavaScript-based codebase, ease of memory management, and the ability to handle complex graph processing efficiently. After evaluating numerous languages and making multiple prototypes — including in C# — Go emerged as the optimal choice, providing excellent ergonomics for tree traversal, ease of memory allocation, and a code structure that closely mirrors the existing compiler, enabling easier maintenance and compatibility.
>>3417329 снимаю шляпу за ссылку на источник но >>3417327 >such as the need for structural compatibility with the existing JavaScript-based codebase вот это в первую очередь вряд ли там 90% кода - обход деревьев но даже создание и обход можно было бы написать на unsafe, обернуть это в safe api и юзать без боли так что аргумент "сложна" считаю несостоятельным, а выбрали больше потому... переведу на нормальный с официально гринтекст: "ну го больше внешне на джс похож, чем другие, а компилятор уже написан на джс - кодерки будут брыкаться, а разогнать их не могу, они же и писал тс компилятор, чувствуют власть, новое учить не будут, поэтому го. Что то хуйня на сборщике мусора, что эта - горбоатого только могила исправит. Даже шарпам пытались научить, что было бы более логично, но макаки взубнтовались, им сложна, очень далеко от их джс-сиськи"
>>3417363 почему ты так считаешь, анон? почему есть проекты, которые начаты на rust? почему им уперлось? такое - это какое? разверни мысль, хотелось бы услышать не просто мнение, а обоснование
>>3413681 >>3413683 А что это за язык такой? Выглядит неплохо, но есть доеб: непрозрачно Поясню: очевидно, что тут работает через ссылки, но в коде этому нет отражения. Напомнило шарпы: экземпляр класса выделяется на куче, возвращается ссылка, работаешь дальше только со ссылкой. Но это приводит к проблемам, ведь не все объекты - экземпляры класса. Так и тут: y - это ссылка? Любой объект - это ссылка? Объекты хранятся на стеке или на куче? Если на куче, то язык к гц? Если на стеке, то нахуя создавать каждому объекту ссылку? Понимаю, что я просто не знаю язык, поэтому много вопросов, но в любом языке непрозрачность вредит. Я тут не вижу где указывается ссылка/указатель
>Напишите такой же аналоговнет на расте Нет идеального языка, где-то будет бо-бо. Либо гц надо будет создавать, либо безопасность будет держаться на плечах кожаного мешка, либо как в расте: болью создания циклических структур - оказывается нет идеального языка Но, внезапно, в ансейфе можно создавать циклические структуры, прямо как в небезопасных языках, то есть хуже, чем в небезопасных языках не будет. Но остальные части можно писать в сейф-режиме, то есть лучше, чем в небезопасных языках.
Ну и кста, если тревожник и циклическая структура используется не в хот-пути, то берем за основу вот это >>3413729, добавляем RefCell, получаем циклическую структуру на расте без unsafe
быстро дополню да, согласен, unsafe-код получился больше, чем у тебя: длиннее, по логике лишняя сущность (refcell), чуточку сложнее но 1) никто не запрещает юзать unsafe, и это в любом случае будет НЕ хуже, чем у тебя 2) мы взяли пример, где у раста слабое место. Как я говорил, идеального языка не существует, что-то уйдет в минус, но у раста прям хороший трейд-офф: вместо гц и потери безопасности в узких местах надо ввести refcell (что чуть-чуть усложнит код и введет хоть и незаметный, но оверхед), либо все же потерять гарантии безопасности, но лишь в этих самых узких местах, которые отполируют в либах взрослые дяди и отдебажат тысячи ручек
>>3417618 Плохо выразился Я к тому, что по абстрактной логике - никакого refcell быть не должно Вот типа пишешь на псевдокоде - ты не будешь писать refcell А вот когда уже кодишь на расте, ты должен учитывать, как ты называешь, внутреннюю логику и ее реализацию Поэтому да, чисто логически: refcell - лишняя сущность, но необходимая в языке с аффинными типами, которые дарят свои плюшки
>>3417618 ну и немного подушнить раст использует аффинные типы (те, которые следуют move семантике), их правильное применение гарантируется борроу чекером. Видимо, ты это имеешь в виду, когда говоришь "у раста есть внутренняя логика". Но RefCell - это не реализация этой внутренней логики. Это даже не часть языка. Это просто код, контейнер, который немного ослабляет ограничения борроу чекера для элемента этого контейнера во время компиляции и переносит эти проверки на время выполнения путем использования unsafe кода внутри.
>>3417416 >но даже создание и обход можно было бы написать на unsafe, обернуть это в safe api и юзать без боли Лол, так может сразу на сишке написать? Или лучше на зиге!
>>3417635 Правильная реализация линкед листа на педерасте - это ненаписанная реализация линкед листа, смешно видеть эти все рефцелы и прочий костыльный мусор.
>>3417907 если пытаться переобучать макак с джс - согласен но так уж получилось, что Хейлсберг в тупике: очевидно, что заменить команду он не может, ведь они писали компилятор и знаю нюансы и тонкости, а переобучать макак на что-то далекое от джс - макаки устроят бунт но если бы эта команда изначально знала раст - написали бы за тот же срок, что и на гошке
>>3417908 тут уже фак для таких как ты пытались создать даже мои посты выше давали ответ, но растхейтеры действуют по своей методичке я не хочу второй раз объяснять, просто перечитай хотя бы это >>3417533 >1) никто не запрещает юзать unsafe, и это в любом случае будет НЕ хуже, чем у тебя >2) мы взяли пример, где у раста слабое место. Как я говорил, идеального языка не существует, что-то уйдет в минус, но у раста прям хороший трейд-офф: вместо гц и потери безопасности в узких местах надо ввести refcell (что чуть-чуть усложнит код и введет хоть и незаметный, но оверхед), либо все же потерять гарантии безопасности, но лишь в этих самых узких местах, которые отполируют в либах взрослые дяди и отдебажат тысячи ручек
Да просто пиздец, ты сам выделил в гринтекст мою цитату "обернуть это в safe api и юзать", но все равно будто не видишь этого. Ты не смог разобрать ОДНО предложение и понять его смысл. Давай все же натолкну: unsafe 0,1% кода != unsafe 100% кода. Или это тоже надо как-то разъяснять?
Когда усвоишь информацию выше - можешь мне написать Если я увижу, что ты не усвоил информацию или усвоил, но все равно действуешь по своей методичке - я не хочу тратить на тебя время
>>3417912 Еще один с методичкой Реализуй линкед лист как хочешь: хочешь с рефцеллом, хочешь без, в зависимости от твоих требований
Тебе тоже относится то, что я писал анону выше в этом посте. Тоже проспись, тоже почисти зубки, поешь полезную и сбалансированную еду, сделай зарядку, приведи голову в порядок, чтоб у тебя была возможность усвоить то, что я написал (вроде ничего сложного не писал же), обработать эту информацию, а после этого мы сможем конструктивно поговорить. А то как с нпс общаюсь, одни и те же предложения, одни и те же тейки. Приводишь контраргументы, ждешь какого-то развития событий, конструктивного обсуждения, но происходут перегруз, и... "на расте ты не сделаешь циклическую структуру", "на расте невозможно реализовать линкед лист правильно". День сурка какой-то
>>3418080 >но если бы эта команда изначально знала раст - написали бы за тот же срок, что и на гошке Через 3 года любая команда, которая изначально знает раст, педерасто-сообществом выписывается в команду, которая не знала раст изначально, или неосиляторов. >растхейтеры Мимо, педераст, я хейчу вас, растомакак, язык норм для своих задач.
>>3418659 >Через 3 года любая команда, которая изначально знает раст, педерасто-сообществом выписывается в команду, которая не знала раст изначально, или неосиляторов. таблетки