>>1789272 >нормальные сервисы Какие сервисы? Либы экосистема для прода может еще и сырно вато, но особо не вникающему мимокроку написать рестик + фронт на последних высокоуровневых вас либах достаточно просто
>>1790450 При всей сложности языка, как только хочешь придумать клёвую зирокост ёба-абстракцию, тут же натыкаешься на то, что тебе нужны фичи типа GAT и специализации, которые хер пойми когда доделают и когда стабилизируют и приходится городить костыли.
>>1790450 По минусам могу сказать за себя: - Сложно вкатываться, даже для программиста с опытом. Первую неделю-две боролся с компилятором и уродливом кодом. Потом в принципе пишется как и на каком-нибудь Go или TypeScript. Но вот с порогом входа надо чё-то делать, отбивает желание продолжать. - Сырые крейты и библиотеки. Всё в глубокой альфе-бете-гамме, даже родные библиотеки, которые поддерживаются комьюнити редко 1.0. И они все друг от друга зависимы аля какой-нибудь npm. Какой-нибудь печально известный actix за собой тянет пол crates.io таких же сырых библиотек. - Медленный компил. Хеллоуворлд нормально, но если подрубить какие-нибудь зависимости, то вешайся. Перекомпил всего проекта - вообще забей. Можно сразу идти чай ставить. - Малое комьюнити. Я где-то в середине июля решил выучить Rust, сидел в тредах, чёт писал, спорил, семенил в общем. Когда мне надоело - треды умерли нахуй. Показательно. Найти прогеров на расте думаю тоже не так просто.
В целом раст выглядит прикольно, но ОЧЕНЬ сыро. И непонятно когда это изменится. Я пишу на расте для себя, для личного проекта. В продакшен я бы его брать не стал. Если ты его для работы хочешь юзать, а не для себя или ради энтузиазма, то годика через 2 приходи, имхо.
> For now, Chrome investment in Rust will remain a background investigation (mostly directed towards prototyping these tools and techniques). If we become convinced this sort of interoperability is possible, we’ll revisit widespread use of Rust in Chrome, and at that point we plan to work hard to achieve this with robust production-quality solutions.
Но пока что вяло, сначала докожи. Не удивлюсь если этим занимаются уволенные из мозиллы.
А вот тебе ещё сверху чуть более философских субъективных мыслей, может, что-то покажется интересным.
— Небольшое число вакансий
Любой условный мейнстримовый JS требует гораздо меньше усилий для вката или переката на более интересное место. Вакансий везде до хуя, есть устоявшиеся подходы к разработке и модные фреймворки: сиди дрочи пет проекты и ходи брутфорси вакансии. (другой вопрос, что тебя ждёт в конце такого пути, но это уже отдельная тема)
На Rust вакансии приходится искать, почти все они в Америке и Европе (и то там сильно меньше по сравнению с Америкой), в остальных странах суммарно и полсотни не набиралось тогда, когда я занимался поисками. И искать приходится не только на linkedin/hh, а в Twitter, /r/rust и через сарафанное радио. Зачастую ещё и оказывается, что Rust там всего лишь часть системы, довольно обособленная, и в твои обязанности будет входить что-то ещё.
В России сейчас, наверное, и 15 компаний с чистой разработкой на Rust не наберётся включая все блокчейны. То есть, если хочется увеличить шансы найти работу, в дополнение к Расту сразу нужен хороший иностранный язык.
И на любую зарубежную вакансию очередь из долбоёбов-вкатывальщиков со всего света, готовых работать за еду, лишь бы на Rust, рассылающих резюме во всё подряд, что найдут.
А если учитывать, что наличие проектов на Rust не делает компании и работу автоматом хорошей и интересной (особенно в далёкой перспективе), то выбор сужается ещё больше.
- Серьёзные требования к соискателям
К счастью, не всем таким долбоёбам что-то светит; к несчастью, потому, что нужны специфические знания.
Вся экосистема Раста ещё не вылезла из пизды альфы, выделиться глубоким знанием чего-то именно в Rust сложно: обычно нужно знать хорошо сам язык (вернее, то подмножество, что используют в этой компании) и очень хорошо предметную область, а это уже обычно специализация, которую нужно получать годами работы и от которой очень сложно потом уйти без падения зарплаты.
Обиднее ещё то, что эти знания плохо переносятся между областями: веб-макака на Rust с прекрасным знанием редисов, кафок и прочих кубернетесов почти бесполезна в каком-нибудь embedded на Rust, там совершенно другие задачи. Так что количество доступных вакансий на Rust на самом деле ещё меньше: долбоёбов брать человека просто за знания языка и библиотек (которых всё равно особо нет) не так много. Тех, кто при этом будет платить нормально, ещё меньше.
- Много не-Rust "legacy"
Если выкинуть блокчейн, то большинство проектов на Rust не появляются в вакууме: обычно несколько фанатиков проталкивают идею о светлом ржавом будущем, получают под это бюджет и начинают что-то ваять и интегрировать с текущей системой.
Очень частый сценарий в вебе: копролит на php/python/java/younameit распиливают на микросервисы на Rust, чтобы вот в этот-то раз всё стало заебись. Мало того, что тебе в этом цирке придётся учавствовать, да ещё и на Rust писать будешь половину времени, остальное время дебажа старый продукт в тщётных попытках понять, что этот индусокод делает, и что за хитровыебаную бизнес-логику от тебя хотят.
- Rust может быть очень разный
В том же вебе ты будешь шлёпать типичный крудоговногод уровня `if err != nil`, только на Rust, склеивая клеем логику и либы с crates.io Про unsafe будешь в страшных сказках слушать и вряд ли сам будешь трогать (если не поехавший экспериментатор).
В wasm проектах тебе с порога в зубы прилетает `#![no_std]`, с которым не работает 95% всех крейтов, зато добавляется горсть новых типа web-sys со своей особой пизданутостью. В embedded к этому бонусом будут ffi биндинги ко всяким либам на C и, если не повезёт, ещё и макросы с asm и, конечно же, unsafe через unsafe.
Конечно, часть опыта переносится, но далеко не всё, особенно если в проекте найдутся ебанутые любители использовать много nightly фич, которые могут и меняться со временем.
- Мало знаний о том, как правильно писать на Rust
Кроме того, что использование фич языка может сильно отличаться от проекта к проекту, так ещё и знаний о том, как писать нужно и как не нужно почти нет: каждый дрочит как хочет и охуевать от проекта к проекту иногда приходится знатно с каких-нибудь пизданутых самописных процедурных макросов, любовно размазанных толстым слоем по проекту и прочих граблей.
Обычное большинство твоих коллег (как и ты) будет среднехуёво знать сам язык и кодить в меру своего разумения так, как им видится. Если повезёт, дело ограничится какими-нибудь тихими особенностями (а не полным пиздецом) в уголках их проектов из-за того, что они не смогли (не подумали) договориться о том, как код писать.
В любом случае, учиться тонкостям тебе придётся, скорее всего, самому, потому что те пара человек, которые хоть что-то шарят, заняты так, что им совсем не до тебя: компанию, в которой целый штат умных Rust разрабов пилят что-то и делают ревью кода друг друга, ещё поискать нужно.
- Плохой тулинг и сложности с поиском серьёзных ошибок
Несколько дней подряд дебажить принтами огромный проект с кучей модулей, собирающийся с нуля минут 40, только чтобы обнаружить, что в одной из самописных сишных либ кто-то что-то криво сделал — незабываемое удовольствие. К счастью, это крайне редкое событие, обычно всё валится с паникой или сегфолтами (что тоже иногда бывает непросто дебажить), но если уж какая необычная хуйня случается, то хоть вешайся.
Дебаггеры как бы есть (как и полторы ide), но до уровня дебаггеров JS или Java ему как до луны: обычные структуры из stdlib типа `OsStr` сейчас отображаются как набор байт, а не строки, лол. Максимум, что ты с ними сможешь сделать (и то не всегда): запустить локально приложение и походить в нём по брейкпоинтам, проваливаясь в декомпилированный asm. Возможно, ты даже сможешь понять, что записано почти во всех переменных на стеке (ну или будешь писать и учиться грузить pretty printer'ы на Python для дебаггера, если совсем заебёт).
- Нужно следить за всем, что происходит вокруг Раста и что-то изучать по мере сил
Тут примерно как в JS, доки по языку и либам очень редко бывают актуальными (если вообще есть, лол), всё бурлит, меняется и куда-то несётся, друг от друга зависит и тянет всякие аналоги leftpad. Чтобы понять, как пользоваться нужными библиотеками, придётся зачастую читать их код (и хорошо если тесты или examples будут). Поскольку большинство крейтов имеют версию `0.*`, компиляция может сломаться из-за простого апдейта какого-нибудь крейта (к счастью, не очень часто с таким сталкивался), за всем этим говном нужно следить и обновлять, чтобы не оказаться в дремучей жопе спустя пару лет, что тоже добавляет головняка. Иногда проекты забрасываются, искать альтернативы и всё опять переписывать тоже удовольствие ниже среднего.
Будешь что-то гуглить нестандартное в узкой предметной области — рискуешь нарваться на пару полумёртвых крейтов и всё. Если ты до сих пор впадаешь в ступор от ошибок компиляции, то тебе пизда, загуглить точный набор твоих закорючек зачастую невозможно а то, что гуглится, может и не подойти, потому что даже мелкое отличие может влёгкую агрить borrow checker.
Если полезешь в async, ещё и отличный от tokio, то придётся держать в голове зависимость крейтов от рантайма, что к чему подходит и как это заводить вместе, если не подойдёт (опять читать код, да). Бонусом идёт повышенное веселье с компилятором и всякими `Pin`, хотя раньше, до async/await, когда были комбинаторы было ещё хуже, сейчас норм, можно наколбасить много кода до того, как нарвёшься на проблемы.
Описание новинок в самом языке появляется только в release notes, в Rust Book это оседает непонятно когда, обычно силами энтузиастов, почти всю команду документаторов Mozilla прибила своими увольнениями. Если совсем на это положить хуй, спустя пару лет можно обнаружить себя довольно в стороне от современных фич языка.
Развитие самого языка иногда тоже вызывает вопросы: ключевые люди, сидящие на зарплате у Mozilla, уходят в другие компании со временем, совсем недавно ещё один ушёл. Как ни удивительно, некоторые из них продолжают помогать с развитием языка и в других компаниях, но это не то, чтобы очень надёжная стратегия, как по мне: компилятор это не хуй собачий, даже люди на зарплатах пилят фичи долго и сложно. Mozilla тоже не даёт скучать, в недавних увольнениях выпизднули много важных разрабов из wasmtime, servo. Сам язык сидит частично на донатах: Microsoft дал им железо для сборки и прогона CI, что-то пилят в языке на голом энтузиазме мимокрокодилы. Учитывая, что с баблом у Mozilla туго, быстрого развития языка можно не ждать, да и будущее тоже немного туманно: уже пошли разговоры о полном выделении Rust в отдельную организацию (сейчас как минимум бабло идёт через Mozilla).
Остатки кор тимы тоже не выглядят до хуя уверенными в своих действиях, вспомнить хотя бы выстраданный async/await с его костылями (`Pin` & `Unpin` с его unsoundness), который так и не доделали (async traits), хотя мудохались несколько лет. Те же функциональщики смотрят на все эти заморочки с async блоками и иногда обсуждаемыми try блоками с удивлением, есть вполне себе рабочие подходы к дизайну языка, которые позволяют этого всего зоопарка избежать, унифицировав.
Понятно, что это сложно и требует хороших изменений в кодовой базе, но странно видеть погоню за фичами, которые на них могли бы быть основаны без хоть какой-то подготовки к этим фичам. Видимо, в самом коде всё тоже не так гладко, раз никаких подвижек в этой области пока нет и мы, наоборот, наблюдаем кучу всяких регрессий в последних релизах: как всякие unsound баги, так и всякие адовые замедления компиляции по разным причинам.
— Много бестолкового хайпа вокруг
Грустно наблюдать все эти ебанутые разборки фанатов async-std и tokio, шумиху вокруг unsafe в actix-web и прочую странную активность: вместо того, чтобы помогать пилить крейты, ебучие белки-истерички разводят шум и драму из года в год.
Доходит до странностей: сейчас на crates.io есть всего один НЕ асинхронный production-ready веб фреймворк, и тот в следующей версии тоже станет асинхронным. Получается, просто потому, что это стильно и модно, любой веб-сервер на Rust вынужден тащить один из рантаймов с десятками лишних зависимостей, ебаться с async/await и ограничивать себя в выборе крейтов, либо сидеть на древних, не обновляемых библиотеках. (не говоря уже о том, что есть вполне себе реальные real-time приложения с жёсткими требованиями к latency, которые асинхронные рантаймы в принципе не способны гарантировать)
- Сложно уходить обратно на другие языки
После того, как привыкаешь к Расту, пилишь на нём несколько лет и потом берёшь типичный ебаный проект на каком-нибудь Python/JS, то поначалу просто оторопь берёт, чувствуешь себя как без рук: как можно писать без нормальных типов, без cargo check, с пониманием, что любая строчка может бросить exception и это считается нормальным? В паре проектов без тестов я просто не мог ни строчки написать несколько дней, пока привыкал.
>>1798230 >>1798232 Ну а какие альтернативы? Писать вот так: for (list<ArdourCanvas::Rectangle*>::iterator i = _coverage_frame.begin(); i != _coverage_frame.end(); ++i) { и не надо мне про auto рассказывать
Если кто не знает, он разраб valgrind'а и один из немногих (в раст кор тиме наверное единственный, лол) кто умеет круто работать с профайлерами (которые он сам и создал) и оптимизировать потребление памяти.
Искал недавно работу после двух лет опыта плюсов, и довольно часто тимлиды на техническом интервью упоминали, что у них в команде появляются небольшие группы любителей раста. И коллега с нынешнего места активно агитировал учить ржавчину, считая что за ним будущее. Для меня пока это выглядит как секта, которая активно ведет пропаганду и постепенно расползается в головах разрабов, обещая приход Мессии и избавление ото всех проблем с безопасностью и UB. Рано или поздно мы точно увидим, как ее последователи выйдут на свет и заявят о себе. Покайтесь, ибо грядет!
>>1802846 Я перекатился на гошку, так что можешь троллить меня дженериками и исключениями. Осталось недолго, в Go 2.0 Роб обещал завезти полный фарш и заодно переписать компилятор. И кто будет смеяться последним, а?
>>1802893 Вот кстати нет. Бесит нотепад++ на минутном торможении на открытии всего лишь мегабайтных xml файлов с каким нибудь протоколом, а иде шустрые ваще.
Почему такой говорливый в твиторе Армин Ронахер ещё никак не прокомментировал уничтожение раста мозиллой? Пару раз присмотрелся к C++20 только. Это намёк на перекот?
Хочу в своём проекте вместо Haskell попробовать Rust. Привлекает работа с памятью без мусоросборника и нормальная поддержка SIMD-инструкций. Какие подводные? Из треда понял, что это личный язык Mozilla и они его чуть ли не приктыть хотят? Это правда, если да, то на чём тогда писать-то? Вроде других нормальных язков для программирования без мусоросборника нет.
>>1804361 Ну и Rust могут так же дропнуть. Тут >>1804301 просто товарищ писал, что одна вакансия в апол - это дохуя победа. Кстати, по вакансии видно, что зрелость технологии прямо скажем низковата.
>>1804412 Я хотел это сравнить с вакансиями на Хаскеле, но на удивление в вакансиях на Хаскеле есть требования к знанию Хаскеля. Тут же small, highly skilled team видимо совсем отчаялась найти себе программиста знакомого с языком, и ищут хоть кого-то, а языку его уже по ходу дела обучат.
Как Rust себя поведёт, если я захочу создать 11 миллиардов небольших объектов в куче?
Так-то 11 миллиардов вызовов malloc в лоб - это хуёвая идея в любом языке, но, допустим, мне кое-что известно о этих объектах и паттернах доступа, что позволяет написать для них эффективный кастомный аллокатор. Но он не будет аллокатором общего назначения, он сможет работать только с объектами определенного типа и создавать/удалять их только в определенном порядке.
Получится ли его интегрировать в Rust, как это будет соотносится с уже реализованной в нём системой владения?
>>1804500 Система владения там относится только к ссылкам и по большей части с ней нужно ебаться, чтобы наоборот избежать работы с кучей и безопасно работать с переменными на стеке. Но есть одно большое но.
Аллокаторы в расте не стабилизированы (кроме случае если у тебя один глобальный аллокатор на всё приложение). Так что придётся вместо стандартных умных указателей и коллекций использовать самописные костыли.
>>1804500 >Так-то 11 миллиардов вызовов malloc в лоб - это хуёвая идея в любом языке, но, допустим, мне кое-что известно о этих объектах и паттернах доступа, что позволяет написать для них эффективный кастомный аллокатор
Vec::with_capacity и не выёбывайся.
Если очень надо, то делаешь большой alloc() и субаллоцируешь как хочешь.
>Получится ли его интегрировать в Rust, как это будет соотносится с уже реализованной в нём системой владения?
Твой аллокатор вернет какой-то хендл, который будет единственным владельцем объекта наподобие Box. Детали зависят от того, что тебе реально нужно. Один из вариантов: https://ferrous-systems.com/blog/zero-sized-references/
>>1804518 А можешь объяснить что конкретно там произошло? Почему ошибка борроу-чекера а не тайпчекера? И в чем там проблема с выводом? У f1(v: &str) указан тип аргумента, какой там может быть другой тип в замыкании и как это может повлиять на борроу-чекер?
>>1804525 >Vec Сколько в него лезет, если речь идёт об объектах переменных размеров, лежащих в куче? >Твой аллокатор вернет какой-то хендл, который будет единственным владельцем объекта наподобие Box. Да, как-то так себе и представлял.
>>1804553 Там скорее всего очередное проявление хронической болезни раста - борроу чекер иногда (в основном если там несколько времён жизни и они как-то взаимосвязаны, т.е. одно зависит от другого и т.п.) выводит слишком большое время жизни у ссылок в аргументах функций. Чтобы сделать борроу чекер безопасней у него есть правило - если точный лайфтайм вывести невозможно, бери самый большой. Тут судя по всему он выводит лайфтайм у аргумента равный замыканию (несмотря на то, что внутри замыкания аргумент никак не сохраняется) и потому получается ошибка.
>>1804640 Я правильно понял, что rule of thumb - указывай типы переменных в замыканиях и будет счастье?
Алсо еще вопрос. Как в Rust с асинхронностью? В Хачкеле асинхронность типа совсем прозрачная, т.к. всё ранится в IO и отдельная async-монадка не нужна, в Шарпе есть встроенная async-монадка через async/await, в Скалке/F# через for comprehension/computation expressions, как там в Расте?
Насколько это монадка и насколько хорошо она играет с растовскими правилами владения? Ведь асинхронная монадка - это по идее пиздец, состоящий чуть менее, чем полностью из замыканий. Насколько этим удобно пользоваться в Расте по сравнению с другими языками?
>>1804749 > указывай типы переменных в замыканиях и будет счастье? Нет. Эта ошибка немного другого толка, и скорее всего её быстро исправят. > Как в Rust с асинхронностью? Средне. Асинхронные функции возвращают уникальный объект, который имплементирует специальный трейт future. Внутри асинхронной функции с этим трейтом можно использовать оператор await (т.е. с точки зрения await нет разницы является ли функция асинхронной или синхронной, но возвращающей Future-подобный объект).
В итоге самая первая асинхронная функция возвращает future-подобный объект, который ты передаёшь рантайму (а встроенного рантайма в стандартной библиотеке нет) и он запускает весь этот набор функций.
В расте у асинхронных функций есть огромный плюс - по умолчанию они возвращают impl Future<Output = ?>, а значит для использования асинхронщиный не нужно выделение памяти, как-как всё будет умещаться на стеке (что впрочем не мешает тебе вызов асинхронной функции отправить в кучу, чтобы например уменьшить размер future-объекта твоей функции, так-как иначе он будет разрастаться, что иногда нежелательно [1]).
Самый большой недостаток вытекает из этого самого преимущества - асинхронные функции нельзя определять в трейтах. Тут [2] написано об этом очень подробно. Там как раз и требуются аналоги "типов высших порядков" именуемые GAT. Недостаток можно обойти ценой аллокации при каждом вызове функции (т.е. будет возвращаться Pin<Box<dyn Future<Output = ?>>>), что и делают макросы async_trait (как я сказал выше разницы нет между асинхронной функцией и синхронной с future-подобным объектом, что эти макросы и используют).
Второй по величине недостаток (хотя с точки зрения юзабилити скорее первый) - это то, что стандартизирован только сам трейт Future, и помощники по работе с ним для создания рантайма. И больше ничего. То есть даже чтобы в асинхронной функции сделать таймер, нужно будет использовать специальную функцию рантайма, которая у каждого рантайма будет разной. В итоге на расте есть куча библиотек, который работают только на одном рантайме, а на любом другом не запустятся. А написать универсальную для любого рантайма библиотеку зачастую попросту невозможно и максимум что делают поддерживают два самых популярных рантайма (async-std и tokio),а всё остальное идёт лесом.
>>1804895 > который работают только на одном рантайме, а на любом другом не запустятся > два самых популярных рантайма (async-std и tokio),а всё остальное идёт лесом. Ах да, чуть не забыл. Даже если две библиотеки используют один и тот же рантайм, но несовместимой (с точки зрения semver-семантики) версии, то это считается как два разный рантайма и программа работать не будет, лол.
Аноны, обращаю ваше внимание, что уже есть либа для simd, работающая со стабильной веткой раста. https://github.com/jackmott/simdeez Можно даже писать без привязки к конкретной реализации, задавая нужную через cfg или выбирая прямо в рантайме. Я уже отъюзал, правда пока только для sse
>>1805739 Спасибо. Но я склоняюсь к тому, что на любом языке надо писать в идиоматичном для него стиле. Я на Rust стал смотреть именно потому, что у меня возникло подозрение, что он из коробки может лучше подходить для моих задач.
Кстати, тут писали, что Rust очень мендленно конпелирует. Насколько актуальная эта проблема? Хаскель тоже медленно конпелирует, но там никто не пересобирает проекты по миллиону строк, проект разбивается на пакеты и модули, в процессе разработки перекомпилируют только модули, над которыми в данный момент ведётся работа.
Т.е. скорость работы конпелятора Rust - это реальная проблемма, или это просто следствие неправильного подхода к разработке некоторых разработчиков?
И еще вопрос: как в Rust обстоят дела с профилированием программ? В Хаскеле профилирования де-факто нет. Т.е. формально оно там как-бы есть, но для профилирования программа конпелируется в специальном режиме, который херит большинство оптимизаций. Т.е. профилируешь ты там вовсе не то, что будет реально работать в продакшене, а какую-то совершенно другую программу, которая по определению раз в 10 медленнее и никогда не будет использоваться. Как с этим в Rust?
>>1807718 > Как с этим в Rust? Подойдёт любой профайлер для С/С++ кода. Раст умеет создавать дебаг-информацию для релизного кода (но по умолчанию вроде не создаёт, нужно включить в cargo.toml) и из неё профайлер и возьмёт имена функций.
>>1807718 > И еще вопрос: как в Rust обстоят дела с профилированием программ? В Хаскеле профилирования де-факто нет. Т.е. формально оно там как-бы есть, но для профилирования программа конпелируется в специальном режиме, который херит большинство оптимизаций. Т.е. профилируешь ты там вовсе не то, что будет реально работать в продакшене, а какую-то совершенно другую программу, которая по определению раз в 10 медленнее и никогда не будет использоваться. Как бы так всегда. В vs даже два разных режима компиляции: debug и realese.
>>1807731 Ну не скажи. В Java есть stack profiler, который вполне адекватен, не раз им пользовался. Он реально показывает чем занимается программа. В C# вроде тоже адекватный профайлер хотя не писал на нём уже лет 10, забыл всё, но вроде помню, что мне удавалось с помощью него находить узкие места и оптимизировать.
В Хаскелле единственный адекватный профайлер - это запуск с +RTS -T -s. Да, он покажет статистику по мусоросборнику, количество аллокаций, время мутатора и время коллектора. Но он не показывает, что именно аллоцируется. Чисто инфа, что твоя программа аллоцировала столько-то гигабайт, столько-то было скопировано в следующее поколение, заняло столько-то времени, общая статистика без конкретики.
А если хочешь узнать, какие именно объекты были аллоцированы, нужно перекомпилировать программу в другом режиме. И он, сука, вообще не имеет никакого отношения к продуктовой конпеляции, даже близко не похож. Он генерирует совершенно другой код, который может быть на порядки медленнее, чем продуктовый. Пытаться оптимизировать этот код вообще бессмысленно, ты просто две совершенно разные программы оптимизируешь, скомпилированные по совершенно разным правилам.
Да, может быть в Джаве есть какие-то тонкие моменты профилирования, которые ломают некоторые оптимизации если ты хочешь собрать слишком много информации, но в целом выхлоп примитивных профайлеров вполне адекватен. В Хаскеле любая попытка получить больше информации, чем просто статистика мусоросборника, ведет к генерации абсолютно неадекватного кода.
>>1807716 >Т.е. скорость работы конпелятора Rust - это реальная проблемма, или это просто следствие неправильного подхода к разработке некоторых разработчиков?
Он выплевывает тонну почти неоптимизированного IR, с которым тяжело работать. Но инкрементальная сборка тоже есть.
Ребята, шарю в ангуляре и typescript/rxjs/Observable. Решил попробовать сервак попдиски-перенаправления сообщений с веб-сокетов в кафку на Rust написать для кровавого ентепрайза на каком-нибудь tokio, я нормальный?
>>1809999 Работает (с недавних пор даже оффициально [1]) на АВР. А какие ещё 8-битники популярные есть? Мне на ум только стм8 приходит, но он анально отгорожен и для него нет бэкенда для ллвм.
>>1807716 >Т.е. скорость работы конпелятора Rust - это реальная проблемма, или это просто следствие неправильного подхода к разработке некоторых разработчиков?
Инкрементальная сборка есть, но если ты меняешь что-то в ядре (либа, от которой зависит ещё куча либ), то оно всё будет перекомпилироваться. Ну либо юзай sccache, чтобы не перекомпилировалось постоянно.
Есть ещё проблема в том, что каждый раз когда обновляешь компилятор, тоже надо будет всё перекомпилировать. Это не так больно на stable, а вот если ты на nightly и постоянно его обновляешь, тогда неприятно.
окей, я вроде со знанием delphi/c#/typescript понимаю что происходит в расте, но есть ли какие-либо книги по архитектуре приложений/системному программированию для deep погружения?
А Rust-то летит вверх. Если в начале года его не было видно и слышно, то к середине он уже был на 20 месте. А сегодня на 18. Такими темпами к концу года-началу следующего он может и в 15 войти, а то и в 10.
>>1807788 > Пытаться оптимизировать этот код вообще бессмысленно, ты просто две совершенно разные программы оптимизируешь Добро пожаловать в native и runtimeless. Это же не байткод гонять.
>>1817088 >Почему у раста такой всратый синтаксис, посоны? Два пикрандома из гугла. Что тут всратого? Что из того что ты тут видишь "всратого", нет в тех же плюсах, жаве или шарпе?
У растеров есть привычка вызывать несколько функций на одной строке, например. Но это нормальная практика и для жсеров и для хаскелистов и для других функциональщиков. И это, кстати, тоже может быть решено правильной структурой программы.
Так же есть некоторые фичи раста, которые позволяет наоборот количество кода сократить. Разница между инструкцией и значением например, хорошая фича, позволяет некоторые решения сделать очень элегантными. Или что каждая конструкция языка может возвращать значение, тоже приятная фича, которую хочется в других языках.
>>1817165 >У растеров есть привычка вызывать несколько функций на одной строке, например. >Но это нормальная практика и для жсеров и для хаскелистов и для других функциональщиков. Ну вот, говнарь сам честно признался. "Нормальный" синтаксис... для жээсеров (лол) и прочей говношвали мразотной. Именно это и всрато, дерьмо, как и ты, и все растеры, одна и та же грязь.
>>1817192 >У растеров есть привычка вызывать несколько функций на одной строке, например. >Именно это и всрато Ну так не пиши так, в чем проблема?
>для жээсеров (лол) Ещё один окатыш с бинарным мышлением. По ключевым словам тригеришься, долбоёб?
>и прочей говношвали мразотной >дерьмо, как и ты, и все растеры, одна и та же грязь. Да у тебя пердак рвёт не на шутку. Rust твою мамку трахнул генгбенгом? Или может отца? Почему ты так злишься?
>>1817201 Так и запишем: Раст - параша для жээсеров и хаскелочуханов. И откуда берется отрицание, что это всратое дерьмо, если прямо сказано что это всратое дерьмо?
>>1817409 >Так и запишем Куда ты там что записываешь, придурок? Воображение опять разыгралось? Прости, но мнение умственно отсталых тут никому не интересно.
>Раст - параша для жээсеров и хаскелочуханов. И что ты ТУТ делаешь в таком случае, обиженка? Пиздуй в свой тред по delphi и php, неосилятор хуев.
>>1817948 >аче,звучит по unixlike-ски Ну да, мышка же в линухе не поддерживается. Поэтому приходится нампадом себе очко разрабатывать. Зато лучше всех играю в мортал комбат. Комбины такие мучу, охуеешь.
Кто-нить может вкратце пояснить за разницу между async-std, tokio и actix-rt? Я так понимаю (сейчас перечислю свое виденье, если ошибаюсь поправьте и добавьте, что знаете вы) Это три конкурирующие либы для асинхронного программирования. Первые два предлагают зеленые треды на пуле потоков, актикс - однопоточная асинхронщина. Использовать одно из другого невозможно? Или можно как-то обернуть? Мне бы очень хотелось в actix-web использовать кое-что из async-std.
>>1818058 Актикс сделан поверх токио, так что в этом списке он лишний.
А асунк-стд и токио - это две конкурирующие реализации рантайма для асинхронных функций (т.е. той части, которая непосредственно их запускает) в расте, поскольку в стандартной либе никаких рантаймов нет. Зачастую выбора особо и нет, поскольку рантаймы друг с другом несовместимы и много библиотек работают либо только с токио, либо и с тем и другим, так что в 90% случаев будешь выбирать именно токио.
>>1818067 > А чем тогда занимается actix-rt? Раньше он и содержал в себе собственный рантайм, а потом решили переехать на токио и сейчас он представляет из себя просто обёртку над ним. > Почему Токио, а не стд? Так сложилось исторически. Какой выбрали, на тот и переехали.
А его нужно как-то отдельно настраивать? Оно вообще ничего не проверяет и не подсказывает, только подсвечивает синтаксис, устанавливает зависимости из cargo, иногда жалуется на кусок кода, который на самом деле норм. Может переставить или что... Пользоваться невозможно. А вот посоаетованный Vs code из коробки завелся и все вроде ок.
>>1818412 Idea, Eclipse, Emacs, Vim - это не про написание кода, это про секс. Про жесткий секс. На то программисты и анальники - им нравится когда их ебут. Когда они пыхтят, когда им неудобно, когда что-то отваливается и это надо чинить (желательно самому), когда что-то не работает из коробки, или работает но плохо.
Если же тебе просто хочется код писать - VSCode, Visual Studio, Sublime Text. Они покроют 99% твоих потребностей.
>>1818412 никогда не жаловался в не туда прыгает по референсам збс сам раскрывает макросы, что для меня существенно подсветка несуществующих идентификаторов ебанутая, да но в целом мне норм вскод могёт почти всё то же самое, кроме скакания по макросам, больше ничего против не имею
>>1818430 Ты так говоришь, как будто раст учится быстрее вима. Но это нихуя не так. Вим — это раст в мире текстовых редакторов: он охуенный, но не все в него могут.
>>1818430 >Когда они пыхтят, когда им неудобно, когда что-то отваливается и это надо чинить (желательно самому), когда что-то не работает из коробки, или работает но плохо. >Ты так говоришь, как будто раст учится быстрее вима. Типичный программист-анальник. Тебе в кайф пыхтеть? Вим это устаревшее говно. Оно живо только благодаря тому, что есть узкое место для применения (адм. серверов) и программистам-анальникам, которым нравится быть "нитакими" и пыхтеть когда им в задницу засовывают неудобства.
Вот хорошее мнение почему vim морально устарел: https://tonsky.livejournal.com/314598.html А если ты Vim переделываешь под себя, то какой смысл юзать его, а не, например, VSCode, Atom, Sublime Text?
>он охуенный, но не все в него могут. Он вообще не охуенный, ты им пользуешься только потому что "не все в него могут".
>>1818430 В жыдее всё ископобки и никакого пердолинга.
> VSCode, Visual Studio, Sublime Text Мне нужна среда для работы с кодом как с кодом, а не с портянкой буквоговна на форуме, а все эти блокнотики-разукрашки, идейно вышедшие из notepad++ именно так с ним и работают.
>>1818638 >Мне нужна среда для работы с кодом как с кодом Ты хочешь сказать, что в этих редакторах не плейн текст? Если да - то ты просто нихуя не понимаешь, сразу мимо иди. Если нет - то к чему этот высер? Какая разница в каком редакторе редактировать/писать код?
>>1818671 >Vim мне позволяет делать свои задачи быстрее За счёт чего? Ничего конкретного ты пока не сказал, кроме абстрактных обтекаемых фраз. Как и любой идолопоклонник.
>>1818638 >Visual Studio >а все эти блокнотики-разукрашки, идейно вышедшие из notepad++ сразу видно зумерка-долбоеба. на вижуал студии люди софт делали ещё когда ты соплей у своего бати на конце висел.
>>1818711 >пукнуть гринтекстом ссылаясь на авторитет анонимной борде Ой, не конструктивно, да? То ли дело назвать кого-то петухом. Это совсем не апелляция к личности. Ты плывёшь, дурик. Ищешь за что бы зацепиться, но всё мимо. Манямирок трещит по швам?
>Вим это устаревшее говно Да, поэтому я пользуюсь neovim'ом.
>А если ты Vim переделываешь под себя, то какой смысл юзать его, а не, например, VSCode, Atom, Sublime Text? VSCode написан на электроне, работает со скоростью улитки и жрёт оперативку, а чтобы сделать в нём нечто нетривиальное (вроде блочного visual мода), надо обмазаться плагинами на ебучем JS тайпскрипте, которые работают ещё медленнее, потому что электрон. Atom не пользовался, ничего не могу сказать, не считая того, что про этот редактор мало кто слышал. Sublime Text надо покупать, чтобы не приходилось щёлкать мышкой на ебаные "у вас триал: |да, не буду платить| - |нет, не буду платить|". Да и rust-analyzer на нём без плагина. Ну и VSCode тупо лучше во всём, хотя и жрёт чуть больше оперативки и работает медленнее.
Вим проще кастомизировать по сравнению с другими редакторами, потому что у этих редакторов нет трёх различных модов, и надо обмазываться контрольными кнопками в одном Insert моде.
К тому же, мне тупо удобнее делать всё клавиатурой вместо мышки, потому что после геймерского прошлого у меня туннельный синдром на правой руке, а все редакторы кроме вима идут с кучей кнопок, на которые надо щёлкать мышкой.
>Он вообще не охуенный, ты им пользуешься только потому что "не все в него могут". Нет, он просто охуенный и удобен конкретно мне.
>Манямирок Ну разве что у Вас, ведь это Вы всяких петухов сюда притащили. Нормальным людям в 2020 не нужно читать мнения петухов, чтобы выбрать редактор кода. >То ли дело назвать кого-то петухом. Не могу себе в таком отказать.
>>1818723 >VSCode написан на электроне, работает со скоростью улитки и жрёт оперативку, а чтобы сделать в нём нечто нетривиальное (вроде блочного visual мода), надо обмазаться плагинами на ебучем JS тайпскрипте, которые работают ещё медленнее, потому что электрон Так себе аргумент, не пишите код на смарт-чайнике через терминал.
>>1818723 >VSCode написан на электроне, работает со скоростью улитки и жрёт оперативку, а чтобы сделать в нём нечто нетривиальное (вроде блочного visual мода), надо обмазаться плагинами на ебучем JS тайпскрипте, которые работают ещё медленнее, потому что электрон. Это такая же субьективщина как и то, что тебе удобен Vim. Потому что у меня, например, тот же VSCode работает быстро и без нареканий. Задержки при печатаньи, как в том же Atom нет. Вот прямо сейчас открыл свой проект, внутри которого код на HTML, CSS, TypeScript, JavaScript, JSON, Rust, SQL и куча расширений для поддержки всё этого и удобного программирования. Памяти жрёт ~600мб. Но где я ещё найду редактор, который нормально поддерживает всё это и при этом, в общем то, не тупит?
>Atom не пользовался У атома есть беда именно с производительностью. Но он довольно популярен, кста.
>Хватит уже бомбить на vim ну да ну да, это мы бомбим. вас уже на пол треда разворотило от одной картинки с радугой. извините если задели ваши чувства.
>не забудь еще парочку анальных зондов от майков себе в жопу поставить :) где зонды? покажи, ткни, пиздабол.
>У меня 16 ядерный топовый амд на одной машине и топовый i7 на другой. да мне похуй, если честно. но если у тебя при таких системках вижал тормозит, то у тебя просто руки-крюки. по другому это не объяснить.
>>1819068 > да мне похуй, если честно. но если у тебя при таких системках вижал тормозит, то у тебя просто руки-крюки. по другому это не объяснить. Ну а как же "нинада настраивать"? Судя по количеству пользователей idea, большинство людей просто привыкло к тому, что софт тормозит.
>>1819083 >This is not for telemetry, the settings search is using that external service to improve search results. You can disable this with "workbench.settings.enableNaturalLanguageSearch": false
>>1819089 >idea хз, у меня 8 сандальных ядер и 48Г оперы (4Г дал идее на кучу), полёт норм. Открыто 3-4 проекта обычно. Что в ней нравится - сама находит либы для импорта. Пишешь вызов, она подсвечивает красным и предлагает импортнуть. А ещё есть локальная история, когда не коммитишь правку каждой строчки, но в ide можешь отмотаться назад к любому состоянию.
>>1820334 Как у нее с интроспекцией и настраиваемостью? Емакс умеет все вышеперечисленное. Вообще вся хуйня в lsp сервере. rust-analyzer Умеет в автоимпорт, но обсирается на goto-definition постоянно и крашится. rls в автомипорт не умеет, но гораздо шустрее и не так часто крашится.
>>1820782 c идеей какой нибудь в разы меньше жопоебли, хотя я предпочитаю что то более легковесное типа вскода а комбайнами пользуюсь когда ну очень надо
>>1822050 >Что не так с лиспом? Сначала скажи что с ним так.
>Лучше лисп машины для динамического окружения На основе чего ты это решил?
>может быть только смолтолк Это тот полумёртвый язык, единственная адекватная реализация которого обновляется раз в 2-3 года? Он лучше чем лисп, да? Приму к сведению.
>>1822054 > Сначала скажи что с ним так. Самый удобный синтаксис для редактирования. См paredit/smartparens. Гомоиконичность и вытекающая из нее возможность добавлять почти любые модные фичи. > На основе чего ты это решил? На основе того что попробовал кучу вариантов. > Он лучше чем лисп, да? Я не говорил что смолтолк лучше как язык. Я говорил про среду. Рефлексивность это то, что лично мне очень нужно, и единственная реально юзабельная реализация этого — Емакс.
И без CoC ты хуй при наведении мышки чего сделаешь. Православно прикрученный работает с нажиманием клавиши, а не с наведением мышки: >nnoremap <silent> K <cmd>lua vim.lsp.buf.hover()<CR>
>>1822913 Перед каждым использованием vim нужно вводить капчу. Это настолько мощная программа, что человечество пытается ограничить возможность использования её искуственным интеллектом и злоумышленниками. В ней можно писать текст, редактировать его, перемещаться по файлу, настраивать редактор, выделять текст и всё это в разных режимах! В общем-то это достоинство перекрывает все недостатки vim, о которых пишут аноны выше.
Господь бог знает, что может случится если эта технология попадёт в руки ИИ или мусульманских радикалов, вроде ИГИЛ (запрещенная в России экстремистская организация).
>>1823046 А ещё ходят слухи, что скоро на вимскрипте допишут автоматический вводитель капчи, и её не надо будет вводить руками! Всего пять часов брутфорса и готово!
>>1824697 Дропнул доизучение крестов в пользу rust. Писать код всяко посложнее сначала, но когда начинаешь думать в нужном русле - становится очень просто.
>>1826245 Тем не менее, он в хорошей компании. А вот почему его стали меньше гуглить.. Закончились каникулы? Сокращения мозиллы затронули 30% всех писавших на расте? Американским растоманам некогда программировать - заняты на блм митингах?
>>1826242 есть за что критиковать, но если критиковать адово перегруженные спец правилами на каждый чих плюсы то талмут выйдет размером с томик войны и мира
>>1827083 Имея такое количество юзеров и столько опыта, прожженный сишник видит смысл в расто-бекэнде ради memory-safety. Думаешь он тоже решил присесть на мертворожденный паравоз хайпа?
>>1789272 >У меня с растом какая-то странная история, я уже где только не добавился во всякие коммунити, но так и не начал ничего на нём писать. Аналогично
>>1828907 >Сложный, слишком низкоуровневый, долгая компиляция, сырой, так себе альтернатива плюсам, unsafe не панацея >Что-то вообще на критику не похоже Растамане держатся до последнего.
>слишком низкоуровневый Покажи в ассемблере трейты и енамы
>долгая компиляция, сырой, так себе альтернатива плюсам Допилят. Если есть что-то конкретное, то напиши RFC или отправь пуллреквест сам, в процессе можешь вообще решить, что и без этого можно обойтись.
>unsafe не панацея Делать хорошие интерфейсы для библиотек тяжело, кто бы мог подумать. В плюсах вон уже 20 лет с инвалидацией итераторов ничего сделать не могут. Там просто решили, что и так сойдет.
>>1828969 Наоборот похоже на сглаживание штрихов растафилами. Там куда серьезнее проблемы есть, о которых узнаешь когда потратишь тонну времени на сие чудо.
>>1829150 Главный минус раст - на нем не пишут реальные проекты. Это язык фанбоев. Да он крутой, да, безопасный, но язык нужен не сам по себе (хотя сам по себе тоже нужен - в академических целях, чтобы его идеи потом вошли в какой-то следующий более популярный язык), он нужен для того, чтобы на нем реальные задачи решать. Писать программы, которыми пользуются. Большая часть софта, которым пользуешься ты - это плюсы/джава/питон - и да - пхп. У раста есть только экспериментальный движок для фаерфокса, единственный большой проект, и то - команду уже вроде как разогнали из мозиллы.
>>1829437 потому что мелкий проект можно переписать хоть с нуля, если это потребуется. Я не против раста - отличный язык, но пока не промышленный ни разу. В большинстве прикладных задач его берут просто потому что нравится он кому-то из команды. Ну и пропиарится тоже - компания говорит - у нас есть Раст - и к ним идет толпа молодых романтиков-программистов.
>>1829508 И давно это можно переписывать проекты с нуля? Если ты в гроб-кладбище-пидор банке, то конечно, можно и переписать. А если ты стартап, то второго шанса может уже не быть.
>>1829579 >Если ты в гроб-кладбище-пидор банке, то конечно, можно и переписать. А если ты стартап, то второго шанса может уже не быть. У тебя какие-то странные представления о стартапах и банках. В банке тебе чтобы выбить бюджет на "переписать с нуля" нужно на одной ноге с околотопменеджментом быть. Если что-то внедрено - нужна ОЧЕНЬ серьезная причина, чтобы делать что-то вне рамок багфиксинга/микро новых фич. А вот в стартапах наоборт. Хуяк-хуяк, микросервисы в продакшн, презентацию показали, новый раунд инвестиций дали, можно нанять +10 человек и кинуть ресурсы на переписывание с нуля.
>>1829650 Да, убрал, потому что в каком-то древнем расте было по-другому, у меня тулчейн стоял с хуй знает каких времён. Обновился, всё ожило. Спасибо.
>>1829150 >долгая компиляция >Допилят Не допилят. Нет ничего такого, что помогло бы всерьёз компил разогнать. Максимум выжать незначительные проценты. Компил всегда будет таким долгим из-за архитектура компилятора. Бесконечные зависимости для каждого пакета - окончательное потуги в этом направлении убьют.
>Если есть что-то конкретное, то напиши RFC или отправь пуллреквест сам >в процессе можешь вообще решить, что и без этого можно обойтись. Поэтому и >сырой, так себе альтернатива плюсам Брать это говно в продакшн, где ещё самому надо его допиливать - нет, спасибо.
> Покажи в ассемблере трейты и енамы Решил дурачком прикинуться? Ещё кроме трейтов и енамов есть какие-то нормальные абстракции? ООП? Наследование может быть? За счёт отсутствия небесплатных абстракций раст и низкоуровневый.
>unsafe не панацея >Делать хорошие интерфейсы для библиотек тяжело, кто бы мог подумать К чему это?
>Плюсы сложнее Сложнее за счёт чего? Следование небольшому своду правил или паттернов убивает необходимость юзать Rust.
>>1829691 >ООП? Наследование может быть? За счёт отсутствия небесплатных абстракций раст и низкоуровневый.
Здесь нет ООП, потому что разработчики решили, что оно не нужно, а не из-за низкоуровневости. С этим можно спорить, но точно также, например, подумали в Го.
>К чему это?
Если unsafe протекает из библиотеки, то это проблема библиотеки. В биндинге на Питоне тоже можно накосячить, но никто не говорит, что он небезопасный.
>Следование небольшому своду правил или паттернов
Своду из нескольких сотен правил, про большую часть которых ты не поймешь, пока их не нарушишь. Ну и куча эзотерики типа SFINAE.
>>1829894 >Здесь нет ООП, потому что ... Потому что это противоречит философии языка. Не должно быть ненулевых абстракций. Rust это не плюсы, а си на максималках. По задумке, разумеется.
>Если unsafe протекает из библиотеки, то это проблема библиотеки. Сам ансейф и его концепция не без греха. В статье об этом сказано подробней.
>>1829579 Ты все перепутал. Как раз в банке тебе никто не даст переписать с нуля ничего, у них работало раньше на джаве 1.5, зачем им бизнес-риски? Ты пойди еще найди 10 раст разработчиков, а стартап как раз таки должен быть гибкий - там за код не держатся, если надо - можно выкинуть и переписать
>>1831657 В первом матче process_message не вызвал, но он на самом деле снаружи вызывается всё равно, во втором матче вызов появился в процессе отладки.
Книжку тоже читаю, но попутно разбираюсь и ручками.
>>1831657 Потому что "Ping" у тебя — это переменная, а не вариант енума. Если бы ты clippy запустил, тебе бы рассказали, что "Rq =>" ветка недостижима.
>>1831715 Вот это, кстати, косяк. Тоже на таком подрывался. Нужно было в синтаксисе чётко отделить переменные от енумов. Например, ключевым словом var или тип того.
Ребят, подскажите любопытному анону. Вот захотел я переписать свой компилятор с хаскеля на раст ради скорости и устранения повсеместной ленивости. Есть нормальный аналог хаскелевского megaparsec и нормальная обертка над LLVM? Алсо, хотелось бы переписать с си рантайм, в расте как с ручным управлением памятью, сильно больно свой GC писать будет?
Хаскель прекрасен, но тормознут, раст представился альтернативой, заодно решил от других зависимостей вроде си попробовать избавиться, как вы поняли, вероятно. На крестах реализовывать вывод типов хаскелеподобного языка больно, я пытался, раст за счет адт и паттерн матчинга в этом получше должен быть
>>1833940 Написал на хачкеле @ Хорошо, но медленно @ Переписать не сможешь
Так, а как же мантры о том, что хачкель лучше всех выражает сайд-эффекты? Вот тебе нужен такой эффект, как неленивость и вытекающая отсюда эффективность. Давай, вырази это.
>>1834751 В идеале, мне нужно написать свой интерфейс GC, а потом на его основе наделать несколько GC вроде CMS и G1, но на этот раз на расте. А можешь, пожалуйста, перечислить эти крейты? Интересно на них глянуть.
>>1834483 Жирным долбоебам этот вопрос адресован не был. Съеби, быдло.
Я более-менее понимаю, как работает хаскель (провел в его гитлабе и за его системой типов не один вечер), поэтому и спросил про раст как про родственный, но более производительный ЯП. Но тут прилетел этот бесполезный кусок ржавого дерьма выше и начал кукарекать. И вот из-за таких воняющих на весь тред пидорасов и отношение к технологиям соответствующее. Я, блядь, хоть раз что-то сказал про то, что хаскель лучше всех, долбоеб? Можешь засунуть свой язык назад в свою же задницу и спиздовать отсюда.
В первый раз так горит с мудаков в программаче, он же блядь позорит раст комьюнити
а конкретно проблема производительности связана с алгоритмом вывода типов (решения constraint-ов) у хаскеля, я взял своему языку ту же систему OutsideIn(X), но пытаюсь сделать растоподобный синтаксис и мутабельность вместе с частью охуенности системы типов хаскеля, уже срал вопросами по теме в программач же, но как-то беуспешно.
>>1834812 Ну, вообще, я не смотрел на GC в расте, мне не нужно было, но просто идёшь на lib.rs и там ищешь "gc" или "garbage" или ещё чего-нибудь вроде этого.
Хотя мутабельность ты с хачкелем не подружишь, скорее всего, там же сразу линейные типы ебало бьют за мутабельность, нет?
>>1834812 У меня создаётся впечатление, что ты контуженный дебилговно, который раз в год делает очередной проект всей своей жизниговно, который из года в год не взлетаетговно. Ну вот нахуя ты делаешь очередной никому не нужный ЯПговно и компилятор к нему? Не проще ли помочь хаскелю или расту в этих областях? Или ты слишком тупговно для такого и только и можешь пилить свое поделиеговно, а код там такой что все бабы сраки со всего района лезли в него, чтобы найти куски говна своего, но находили только твой код? Зачем говно? Говно не нужно. Надо меньше говна. А без говна будет менее говенно. Говна хватает. Все испускают говно. Надо уменьшать количество говна. Долой произвольную дефекацию. Долой говно. Ты меня понял?) Вот.
>>1834986 Меня больше интересовало, нет ли крейтов для облегчения реализации своих GC, потому что пока что мне ручное управление памятью в расте видится несколько громоздким.
> Хотя мутабельность ты с хачкелем не подружишь
Поэтому у меня модификация (хотя и оригинальная система типов вполне позволяет, но мне она вся не нужна)
>>1834997 Что ж тебе так покоя не дает, что я себе там на своем личном гит сервере делаю-то? Ну пилю я себе PhD, ну отъебись.
> Или ты слишком туп А может, ты?
> Ну вот нахуя ты делаешь очередной никому не нужный ЯП Может, потому, что есть такая задача? Пытаюсь сделать ЯП, в котором конкуррентность проверяется на уровне типов.
Хотя нахуя я вообще тебе это поясняю, ты наверняка даже разницу между STLC и System F не знаешь.
>>1835278 В lib.rs я поискал, я просто нашел код одного кодера, делавшего на расте клон beam vm, у него сделано ровно так, как мне нужно. Просто структура с usize внутри, а дальше обертки для интерпретации этого числа как указателя на что угодно и обратно, арифметика реализована удобно, вот это все. Ну и аллокатор чанков на mmap-е сделан. Последний выглядит почти как на си, лол. Сижу, вникаю в детали. Но за помощь все равно спасибо :) Пойду там искать битовые карты, нужно для G1 GC. Пока что bitset-core выглядит как то, что надо.
>>1835299 Звучит не очень, потому что usize имплементит Send и Sync, а голые указатели — нет (и не зря). Так что может выстрелить. А может и нет. Но сам там смотри, в общем.
>>1835385 Ну тут просто никак не обойтись без подобного, потому что мне нужно работать с указателями на объекты в куче как из потоков GC, так и из потоков шедулеров. Тут головой надо просто думать, ну куда без этого)
Кстати, практика предыдущей версии показала, что использование общей кучи позволяет не только в один актор запихнуть обработку дохрена большого массивчика, что очевидно, но и снижает траты памяти в целом по сравнению с тем же erlang, где у каждого актора сразу своя куча на пару сотен байт. Так что ради таких преимуществ придется и потерпеть :)
>>1835394 не байт, слов, а машинное слово, в зависимости от архитектуры, может и 8 байт быть. Вроде одно слово перепутал, а сколько смысла поменялось...
>>1835400 Ну, с простым IDL языком я вот буквально сейчас его использую, вроде нормально. Правда в книжке пары моментов не хватает, вроде специальных span-матчеров @L и @R, но для этого достаточно почитать немного сорцов и тестов в репе.
Ну и он LR(1), так что если у тебя язык не context-free, то decent recursive Pratt в паре с nom либой может лучше зайти.
>>1835965 JSON - никто специально не придумывал оттого он такой убогий. Просто придумали как передавать данные так, чтобы в жопаскрипте одним eval можно было из строки получить объект.
>>1835138 >Ну пилю я себе PhD, ну отъебись Т.е. ты возможно будущий учёный, какой нибудь доктор технических наук. Будущее светило науки, а разговариваешь как псина из подворотни. Зачем так? Почему нельзя разговаривать по человечьи? Я понимаю, когда так базарят шлюхи из вебкама или инцелы с двача, но учёный, как по мне, должен быть выше этого.
Меня это вообще сильно расстраивает. Мне всегда наука виделась чем-то большим чем человек, чем то великим. Но с течением времени, с тех пор как количество докторов и кандидатов становится всё больше — я всё больше теряю уважение к этому ремеслу (тяжелому ремеслу, я знаю это). Я думаю 90% современных учёных просто паразиты на теле общества. Никакого уважение к ним быть не должно, с них нужно так же как с чинуш спрашивать, тыкая носом в какашки. Все эти гендер стадис, заказные статьи в научных журналах, искуственное усложнение научного материала (haqreu об этом писал). При этом вы ещё более гнусные чем какие нибудь чинуши, у чинуш есть хотя бы гордость. А у вас...Я видел инфу, где в исследовании атмосферу внутри научного коллектива разных университетов сравнивали с атмосферой царящей в коллективе какого-нибудь пригородного завода. Зависить, токсичность, злорадство, паразитизм, надменность — так учёные описывали своих собственных коллег и друзей. Просто лучшие из людей, не иначе.
И вот конкретно ты — часть всего этого мусора. При этом ещё и марасишь как токсичная дегенеративная зумерка. Фу просто, фу.
>>1836549 Я недавно вкатился, на мой взгляд убого выглядят только спецификаторы лайфтаймов, вот эти все <'a> Одиночный апостроф в коде в принципе люто странно выглядит Остальное красиво
>>1836348 Общаюсь с, возможно, тупыми двачерами на понятном им языке, а с умными - на человеческом. Не вижу никакой проблемы. Подчеркнуто вежливое общение на анонимной имиджборде вроде двача выглядит еще тупее, поверь.
> Все эти гендер стадис При чем тут гендер стадис, если эта хрень не только не приносит пользы, но и вообще вредна? ЭТО наукой признают только окуколдившиеся мудаки.
> искуственное усложнение научного материала Всегда будут те, кто хочет выпендриться. К счастью, большинство известных мне компетентных ученых такой фигней не страдает.
> Я видел инфу Ну-ка, покажи, пожалуйста, где ты видел ту инфу? Сослался - пруфани.
Еще ты требуешь от людей соответствия не профессии, а твоему внутреннему представлению об этики этой профессии, что, мягко говоря, странно. Никто не обязан следовать твоим представлениям. Вот никто и никак. Смирись. Я бы понял, если бы в другое время с меня такое требовали, но на анонимной борде, где нахуй посылают просто за то, что ты есть - ???
Про 90% паразитов практически согласен, многие не знают, зачем им PhD и делают в итоге мусорные исследования, переводят на это время и ресурсы, в том числе и интеллектуальные. Тоже вредительство. С другой стороны, если мы позволим кому-то определять полезность исследования, то окажемся заложниками представления этого "надзирателя" о пользе. В каком-то смысле это происходит через индекс Хирша.
Кстати, открою тебе такой секрет: иногда матом можно довольно коротко и ясно донести до человека то, что "нормальным" языком доносилось бы сильно подольше. Банально потому, что мозг не тратит ресурсы на парсинг всей этой мишуры и сразу работает над идеей. Согласись, фраза "хуйни калмана" звучит короче и понятнее, чем "пропусти это через фильтр Калмана". Во второй фразе слов больше при том же смысле.
Facebook is looking to hire compiler and library engineers to work on @rustlang . Rust is taking off within FB, and we'd like to work with the community. Remote work from within the U.S. is possible. U.S. work permit required.
We'll be working on the whole stack. From frontend, to codegen, libraries and tools, to make sure that Rust is able to handle the massive Facebook scale. I know of specific bugs and issues, but we don't have a clear roadmap yet.
>Подчеркнуто вежливое общение на анонимной имиджборде вроде двача выглядит еще тупее, поверь Что значит "поверь"? Я вообще-то тоже тут сижу. Даже на анонимной борде вежливое общение вызывает уважение. Когда два анона спорят и один скатывается к "ха, я тваю мамку ебал" — без судей понятно кто победил в дискуссии.
>При чем тут гендер стадис, если эта хрень не только не приносит пользы, но и вообще вредна? Здорово...
>Никто не обязан следовать твоим представлениям. Вот никто и никак. Смирись. ...А потом ты начинаешь разговаривать как обычная феминистка. "Моё тело — моё дело! Я ничем и никому не обязана!".
Тот факт, что ты считаешь, что никто не может призывать тебя к соблюдению принятой в обществе этики твой профессии — говорит о том, что ОНИ побеждают. Но наше общество ещё не настолько деграднуло. Поэтому когда дело касается врача или полицейского — всё общество в единой порыве требует от них соблюдения этических правил. Врачей даже заставляют принимать полурелигиозную клятву врача (на основе клятвы Гиппократа, которой бог знает сколько лет). Потому что никому не хочется, находясь при смерти, слышать хамство, грубость и "отъебись".
Но чем дальше от тела, чем меньше мы чувствуем связь, чем меньше мы чувствуем значимость и влияния друг на друга — тем больше эти границы размываются. Тут и вылезают левые постмодернисты...Которые никому и ничего не должны, которые не собираются соответствовать твоим ожиданиям и представлениям, которые начхать хотели на твоё мнение и твои взгляды. Заметь как эта идея стремительно растёт в обществе. И чем больше человек развращён — тем больше он "никому и ничего не должен". От фемок и sjw до политиканов и мажоров. Эта идея пожирает людей. И именно поэтому "вредных" гендер стадис — будет становится больше, врач в больнице будет смотреть на тебя как на говно, а коп дубасить палкой. Смирись.
>>1837190 The Developer Division at Microsoft is responsible for supporting many of the company's largest product and service groups. We are looking for engineers to work on Rust compilers and tools to support the usage of the Rust programming language.
Contribute to the design and implementation of Rust compiler front-ends, back-ends, analysis tools
>>1837284 Ну, что я быдло я и не отрицаю но позволить себе подобное могу только на анонимной борде, да, но уж больно странная аргументация у анона, нет, ну правда. Мне кинули ответку про говно, я попросил отъебаться, а тут этот анон решил, что докопаться нужно именно до меня. Ну не дает ему покоя, что я на анонимной борде позволяю себе послать человека, который в забавной форме послал меня. Ну окей. Удачи в этом, все дела.
А что раст нужно здесь обсуждать - это да, поэтому больше сюда по оффтопу отписывать не буду, да и анону выше не советую.
Собственно, у меня и вопрос: битовые поля как в си в расте чем лучше имитировать? Очень надо.
>>1837555 >Неопределенных типов типа auto какого нибудь Это называется вывод типов, всё там определено.
>на с/с++/js Судя по вопросу, опыт у тебя есть только с жс.
>опыт со swift в котором вроде как есть тип Any что как бы заменяет voidx Никак не заменяет, Any — это обёрточный тип хранящий метаинфу о том, что в нём лежит (и несущий соответственные накладные расходы), а void* — это тупо сырой указатель (просто адрес на начало куска памяти), аналогом которого является OpaquePointer в свифте и std::ffi::c_void в расте.
>>1837580 > просто адрес на начало куска памяти Уважаемый господин программист, давай не будем языковую семантику приплетать к работе железа, в каком нибудь эльбрусе например указатели представлены отдельным типом от данных, и передавая voidx ты передаешь не адрес на начало где то в памяти а полноценную информацию о куске памяти с данными или процедурой, просто потому что железо так устроено а высокоуровневый язык позволяет абстрагироваться от всей вот этой хуйни.
Так что давай говорить о конкретных вещах - например об объектах (экземплярах класса) со своими типизированными полями и виртуальными функциями, как в плюсах например запихать разные объекты в массив или передавать их функциям? - или превратить в указатель на непонятное нечто (voidx) или наследовать от некоего общего ( возможно абстрактного) класса:
class Any { private: uint8_t type; public: Any(t) { type = t; }; ~Any() {}; }
class MyObject : public Any { private: int a, b; public: MyObject(int arg1, int arg2) : Any(0) { a = arg1; b = arg2; }; ~MyObject() {}; }
int myFoo(Anyx obj) { switch(obj->type) { case 0: return (MyObject x)(obj)->a + (MyObjec tx)(obj)->b; // ... } }
Вот и вся твоя мета информация, в случае просто передачи voidx компилятор не может сразу назначить грузить определенные поля типа type, как в моем примере. А идея таких языков как раст или го (свиф вроде как jvm язык), в том чтобы избавится от malloc() и free() / destroy(), и оверхэд там связан только с рантайм библиотекой которая контролирует это дело, а не какими не метатипами. Нахрена тогда вообще язык типизированный, в том же джаваскрипте джит компилятор во время исполнения по входным аргументам определяет для каких типов функции / инструкции подставлять, но на то он и динамический язык.
>>1837644 >в каком нибудь эльбрусе например указатели представлены отдельным типом от данных Мне лень лезть и смотреть чего там придумали, хоть я и рад за прогрессивных разработчиков эльбруса, но когда его будут использовать, тогда и приходите.
>return (MyObject x)(obj)->a + (MyObjec tx)(obj)->b; Поздравляю, ты только наговнокодил так, что: а) это нереально расширять и поддерживать, а искать креши и битые данные после даже минимального рефакторинга будешь месяцами; б) вырубил все возможные оптимизации компилятра; в) а ввиду отсутствия прошлого пункта, без жирного гц в стиле жавы/дотнета, который бы дефрагментировал кучу и собирал такое поплотнее — максимально не cache-friendly код, который оказавшись в горячей точке будет дрочить память а не работать. г) хоть это и пример, но даже в нём деструктор MyObject в 2/3 случаев тупо не будет вызываться и ты получишь 30 гб хипа ой)0
>Вот и вся твоя мета информация Дружочек, ты обосрался. Раз уж тебе так нравится аппелировать к свифту, то давай посмотрим, как же вся метаинформация вмещается в 1 байт (у тебя в программе как полагается настоящему хэловорду же не может быть больше 255 типов, кекус): https://ideone.com/7IoQmE >T size: 4 >Any size: 32 https://godbolt.org/z/8Keoaz Внезапна-внезапна, вытерев ноги об систему типов ты заставил компилятор забоксить значение (выделив память в куче, получив x2 размер объекта и как минимум ещё место под счетчик ссылок, которого нет в сырой структуре), а так же получил оверхед по памяти аж целых 3 указателя — на а) таблицу с конструкторами/деструкторами, б) виртуальную таблицу, в) таблицу типов (в которой хранятся: имена всех переменных и самого типа, как и в любом языке с рефлексией, а не 1 ебучий байт). Короче, получил полноценный жопаскрипт, всё как ты хотел.
>и оверхэд там связан только с рантайм библиотекой которая контролирует это дело, а не какими не метатипами Он вообще появляется только когда в дело вступают жс-макакены вроде тебя, что я выше уже расписал. Система типов на то и нужна, чтобы существовать в компайл тайме в первую очередь.
>Нахрена тогда вообще язык типизированный Чтобы юзать типы и писать код, который не будет жрать все ресурсы как тварь на ебучей статичной страничке с 2мя картинками и текстом.
> в том же джаваскрипте джит компилятор во время исполнения А нахуя тратить ресурсы во время исполнения если можно сделать это на этапе компиляции? Да и покрывать тестами каждый пук не надо, лол.
>>1837733 Хуя подрыв > Система типов на то и нужна, чтобы существовать в компайл тайме > Чтобы юзать типы и писать код, который не будет жрать все ресурсы а voidx это какой тип, не подскажешь? > А нахуя тратить ресурсы во время исполнения если можно сделать это на этапе компиляции? Что бы по максимуму использовать аппаратные возможности конкретного процессора на котором код запускают, это как один из вариантов, так же портабельность и типо-безопасность в рантайме, а не только на этапе компиляции >T size: 4 >Any size: 32 Там в ассемблере эти числа литералами забиты, что как раз и показывает что компилятор в компаилтайме опираясь на известные типы все это посчитал, чего с указателем в принципе нельзя сделать. Но это хуйня так как указатель на реальный объект там все равно есть но так же там есть информация например для сравнения типов чего в сыром указателе нет, зато есть в типичных сишных структурах в которых тыкают поля для указателя на функцию, указателя на другую структуру или указатели на кучу. Так что к чему твой перфоманс с кодом я не понял, зато понял что ты лицемерное пиздло серящее на веб при этом используя его ресурсы для компиляции и вывода результата, а не свой локальный компьютер.
Сегодня мы выпускаем очень раннюю версию rust-gpu - новый проект, призванный сделать Rust первоклассным языком и экосистемой для кода GPU!
Программирование на GPU исторически выполнялось с помощью HLSL или GLSL, простых языков программирования, которые развивались вместе с API рендеринга на протяжении многих лет. Однако по мере развития игровых движков эти языки не смогли предоставить механизмы для работы с большими кодовыми базами и, как правило, отставали от кривой по сравнению с другими языками программирования.
В этом проекте мы надеемся, что мы продвинем отрасль вперед, добавив в GPU Rust, существующий низкоуровневый, безопасный и высокопроизводительный язык. И вместе с этим появляются некоторые дополнительные преимущества: система пакетов / модулей, которая является одной из лучших в отрасли, построенная с защитой от условий гонки или доступа к памяти за пределами границ, широкий спектр библиотек и инструментов для улучшения рабочих процессов программистов и многое другое. !
>>1837979 Rust действительно для для особенных людей.
Авторша сабжа @khyperia: > одна из многих причин, по которым я присоединился к @EmbarkStudios было то, что я устал от того, что почти никогда не работал с меньшинствами или даже с людьми, которые были похожи на меня ... и теперь есть абсолютная группа трансгендеров, работающих со мной над rust-gpu, и это потрясающе
>>1789061 (OP) Парни, всем ку. У кого-то осталось фото рабочего стола который постили в треде, или в шапку расто тредов. Там такое ламповое рабочее место, мышка логитеч вертикальная и повернутый монитор. Мб у кого осталось?
>>1841156 >>1840955 Фу, бля, отбой. Это у яху-финаху рекламные новости идут без поля pubtime, причём реклама эта то есть, то её нет. Мне повезло несколько раз подряд проскочить мимо неё именно когда я решил сохранять выхлоп для дебага.
let baz = foo?.bar // - если foo будет null, то цепочка чтений на ней и закончится без исключений а baz == null и его дальше надо тоже ставить с проверкой fn1( bar: baz? ) например
let baz = foo!.bar // - если foo будет null, то выполнение в этом месте остановится
Ананасы, а можно ли провернуть такое: чтобы прямые зависимости моей приложухи собирались как динамические so-шки? Ну типа, чтобы в release/ валялись отдельно my-app и отдельно hyper.so, serde.so и т.д ?
>>1843920 Конечный юзер, это слабенькая виртуалка где-то в дойчлянде, сборку она не потянет. У меня рядом какая-то стройка, из-за неё, видимо, оборудование оператора эпизодически подташнивает и оно теряет пакеты - закачать через scp цельный кусок на 7Mb становится проблемой. Уже подумываю поднять ftp сервер с докачкой или разбивать файл на куски архиватором.
Анон. Вот скажи мне, если closure является по сути сахаром для структуры, а переменные которые closure использует это поля это структуры. То как так получается, что эта структура не захватывает переменные из окружения в свои поля, и при это не делает memcpy?
>>1845111 Если кому-то интересно, мало ли. Раст и правда хранит внутри структуры замыкания ссылку на переменную из родительского скоупа. Вопрос мой был в том, почему внутри скоупа она доступна как объект а не как ссылка на объект. Оказалось, что раст автоматически дереференсит ее для меня. Формально приводя к тому типу объекта которым она является.
>>1846014 >escaping closures Какая-то swift-only костыльная хуйня, нужная для поддержания плохо сшитых by-design штанов. Ты бы ещё аналог оператора GOTO попросил.
>>1846022 Эти штаны называются reference counting по умолчанию, лол.
>>1846014 Никак, в расте и других языках без RC (или с RC где для разруливания циклических ссылок и always strong ссылок из замыканий используется как в GC вроде kotlin native/nim/python) нет необходимости в них.
>>1847162 Нет, не понял. В расте этой хуйни просто нет, потому что лайфтаймы анализируются в компайлтайме и оно тут не нужно.
Оно есть (и нужно) только в свифте (с подсчётом ссылок в рантайме), это такой недокостыль на уровне системы типов, чтобы заставить нюфагов поменьше плодить утечки памяти и не вставлять в язык ещё и гц для таких кеков.
>>1848544 Даст, но только на стек одной из предыдущих функций, на стек текущей функции не даст, да, потому что стек текущей функции зачищается на выходе из функции.
Здесь в `b` лежит ссылка на стековый объект, но вернулась ссылка из функции ниже по стеку. По очевидным причинам, чтобы вернуть ссылку на объект выше по стеку, надо уже иметь ссылку на этот объект, на структуру с этим объектом внутри, коллекцию со ссылками или ссылку на коллекцию.
Аноны, на растовакансии TR Logic кто-нибудь совался? Я весной 2019 пробовал, но я тогда только вкатывался, меня на собесе завернули. Там же на собесе я узнал, что у них работа по Utc, что с моим +8 было бы проблематично - ну и не стал больше к ним соваться. Интересно, они бесконечно расширяются, у них текучка, или не нашли ещё тот бриллиант?
>>1854890 Когда в команде есть хотя бы 6-7 человек — там скорее всего уже будет текучка с текущими условиями рынка, когда можно получать x1,5-2 к своей текущей з/п каждый год, если ты не отбитый даун из треда вкатышей.
Алсо, могут как не испытывать нужды в кандидате (и просто собеседовать на похуй для отчетности), так и иметь кучу бабла и хотеть ускорить процесс разработки. А ещё могут просто базу собирать чтобы потом её продавать и спамить тем кто в неё попал.
>>1855096 Ну, ёпт. Это всё гадания, но неужели никто, кроме меня, не сталкивался? Их вакансия по расту с удалёнкой стабильно висит уже второй год, других-то и нет почти.
>>1855464 Пидарки-хрюши отрабатывают команду директора "мы никого не ищем, нам никто не нужен, но если увижу что вы без дела сидите-хуй сосать немытый заставлю". В итоге сосёшь ты хуй эйчарок.
>>1854890 Делали офер, но потом рассказали про анальные условия работы: Скриншотишь свой экран раз в 30 секунд и в конце рабочего дня отправляешь им архив. Отсутствие на рабочем месте -- штрафы в геом прогрессии. Очевидно такая вакансия будет хоть 10 лет висеть.
Наслушался про ваш раст ебучий, а тут как раз понадобилось написать сервис, генерирующий картинки на лету. Ну, думаю, ща улечу в небеса на крабе. Написал для сравнения на похапе + Amp асинхронный сервис, генерящий png 1000x1000. Выдало где-то 17 rps, думаю - фу, говно. Пишу то же самое на расте - и эта скотина мне полторы секунды такую же картинку генерит через image-rs! Как так-то? Неужели нормальных быстрых конверторов для картинок не завезли? Завтра буду еще биндинги к ImageMagick пробовать, конечно, но чот ппц.
>>1857935 В релиз не собирал, но неужели такая разница? Простой текст эта шняга отдавала под 40 rps в дебаг-режиме, я уже собирался кончить радугой - и такой облом
Решил вкатиться в раст. Что-то пиздец как непросто. Даже когда на перле работал и только изучал, то не был таких потуг. Там в основном пугал синтаксис и его дефолтные переменные. Решил в pr глянуть. Полтреда срачи на тему вим классный/вим хуита для нитаких, из раста уходят разрабы и языку пизда. И как-то вообще желание пропало учить его.
>>1860514 >И как-то вообще желание пропало учить его. У меня постояно такое Начинал плюсы, начали появляться навязчивые мысли что он мертворожден Аналогично с растом
>>1860759 Да, вот есть такое ощущение, что через год раст ТОЧНО ВСЁ! Да вряд ли он умрет, если только вдруг новые мейнтейнеры не загнут его. Ну вот, опять началось
>>1804749 >В Хачкеле асинхронность типа совсем прозрачная, т.к. всё ранится в IO и отдельная async-монадка не нужна >async-монадка через async/await >Насколько это монадка и насколько хорошо она играет с растовскими правилами владения Для начала тебе нужно понять что такое монада
>>1860941 Эксперимент, видимо, закончен. Самое забавное, тонну времени назад, тут бегали шизики, которые говорили что на таких началах раст захлебнется. Только тогда говорили что проблема не в сжв, а хипстерах.
>>1857933 >генерящий png 1000x1000. Выдало где-то 17 rps, думаю - фу, говно. Изучил я значит этот вопрос, возможно на пыхе хуйово оптимизирован пнг енкодер. Нужно было попробовать отключить компрессию. Сделал то же самое на пщ, с включенной компрессией 1000х1000 - выдало 15 rps. Если её выключить выходит 170-200 на разных машинах. А если ещё и использовать более оптимизированные алгоритмы то станет ещё лучше.
>>1864267 А на расте-то с компрессией или нет? Алсоу, ты уж засеки вчистую, сколько микросекунд занимает собственно генерация одной картинки в один поток.
>>1864321 Да хуй знает что там в расте, я просто мимо проходил. Чтобы сгенерить одну пнг вышло 3.693 [ms] (mean). Кстати нашел ещё один bottleneck, попробуй в пыхе оптимизировать рандомную генерацию байтов. В моем случае го это ускорило с 32.301 [ms] до 3.543 [ms] (per request).
Нигде не могу найти объяснение такой штуке: почему при определении диапазонов (например, 1..10) левое значение берется какое есть, а правое - меньше на единицу. Почему решили так, а не сразу вписывать нужные границы, что было бы очевиднее простым смертным
>>1868104 Попробуй 1..=10 По поводу почему, например потому что индексы с нуля начинаются и 0..10 — это десять элементов, а не 11, как бы было с твоей хотелкой.
>>1868161 Чето тоже хотел про ренжи написать Одна (<) операция банально проще (<=) (..N) просто нужно читать как "до значения меньше N" Написав (1..99).step_by(2) на 99 применяешь это одно X < 99 действие и выходишь и лупы Если считать включительно, то или лишняя проверка равенства на каждый шаг, или лишний степ на лупе (плюс возмжный на старте), что не так логично
Я тут решил книгу по расту почитать и первый же пример меня в ступор ввел.
io::stdin().read_line(&mut guess).expect("Invalid input"); let guess: u32 = match guess.trim().parse() { Ok(num) => num, Err(_) => continue, };
Ок, про парсинг это очевидно, читаем и возвращаем ошибку или успех. Но что-то до меня не доходит, почему в случае некорректного ввода чтение строки продолжается? Как мы это сообщили? Ведь с матче ничего про это не сказано.
Не являюсь программистом по профессии, но очень много кодил. Иногда есть потребность в низкоуровнем языке (а к плюсам немного выгорел), скажите, насколько раст еще актуален и есть у него будущее?
В предположении, что render не изменяет размер вектора и не дропает его, а slice принадлежит C++ коду, насколько это плохая идея? Что может пойти не так? Делать копию не хочу, потому что медленно и отнимает гигабайты памяти.
>>1873109 Если тебе не нужен ресайз, то зачем тут вектор? Если нельзя через слайс, то лучше вектор преаллоцировать из Раста, а потом в эту память писать из плюсов.
>>1872922 > Непонятно почему раст так мало популярен у сишников, яп намного комфортнее динозавра С++. 1) популярность растет, но медленно 2) большая стандартная либа, не везде удобно пихать, даже у плюсов в два раза меньше, не говоря про чистую сишечку 3) пока что ебатня с кроссплатформой: если для C/C++ можно просто без задней мысли кинуть код в android studio и скомпилировать (может с какими-то правками по c++stl для особых случаев), то в расте пока что не так комфортно писать кроссплатформу (даже с использованием rust-sdl)
>>1873275 Звучит как ёбаный ад, но если вектор правда не будет дропаться, то, наверное, заработает. Можешь попробовать переопределить в Расте глобальный аллокатор чтобы пробрасывать плюсовые функции.
>>1874704 Чё-та я сомневаюсь, что жирные бинари по неск Мб даже после всех стрипов, panic = "abort" и прочего содержат действительно всё только нужное. Возможно я неправ, не шарю в тонкостях линковки
В языке по умолчанию всё подряд мономорфируется, в результате чего каждый derive может развернуться в простыню. Но тут проблема скорее в любви к абстракциям над абстракциями, чем в языке или стандартной либе.
Почему исполняемые файлы такие большие, это можно исправить? https://lifthrasiir.github.io/rustlog/why-is-a-rust-executable-large.html прочитал это, и все равно не помогло - простая программа весит мегабайты. Можно написать что-нибудь в Cargo.toml что-бы он линковал библиотеки динамично для дебажного билда, а для релиза статично?
>>1875471 Ну, если ты это делаешь вручную, то да. А если конпелятор уже знает, что в этой сошке по вот этому адресу лежит такая-то safe функция, то какая разница? Я даже думаю, что со временем такую возможность запилят.
>>1875280 А файлы-то как раз небольшие. Хеллоуворлд на Сях со статической линковкой (gcc -s -static -Os hello.c -o hello, gcc 9.3.0 под ubuntu 20.04) уже дополз до 800 килобайт. А ведь мои седые яйки помнят смазливых дельфистов, которых можно было невозбранно унизить за их систему виджетов, занимавшую аж целых 400КБ.
>>1873407 > Идеологические различия - сишка это просто, сишка это прозрачно - с помощью присталього взгляда можно понять во что кусок кода конпелируется Конечно можно, вот открываю исходный код линукса/ллвм/гцц и любуюсь на макросы, все сразу понятно и ясно, не то, что ваш убоший раст!
>>1873112 > не то что кресты. ВЫУЧИЛ С++ @ УХ НАКОНЕЦ НАЙДУ РАБОТУ @ НИКУДА НЕ БЕРУТ @ ОПЫТ РАБОТЫ 3+ ЛЕТ @ СТАЖЕР ПОЛУЧАЕТ МЕНЬШЕ СТАЖЕРА-ПИТОНИСТА @ НУ ЛАДНО, ПОЙДУ ХОТЯ БЫ ТУДА @ ПЕРВАЯ СЕРЬЕЗНАЯ АРХИТЕКТУРА ПО @ СПУСТЯ ДОЛГИЕ НОЧИ МУЧЕНИЙ НАКОНЕЦ-ТО СПРОЕКТИРОВАЛ И НАКОДИЛ @ w: СЕГФОЛТ @ ОКАЗАЛОСЬ, ЧТО АРХИТЕКТУРА НЕ БЕЗОПАСНАЯ @ ПЕРЕПИСЫВАЕШЬ @ go w @ ... @ ПЕРЕПИСАЛ, СДАЛ @ ДОВОЛЬНО ПОЛУЧИЛ СВОИ ХЛЕБ И СОЛЬ @ ВСЕ ЕЩЕ СЧИТАЕШЬ, ЧТО С++ ПРОЩЕ РАСТА
>>1876329 >из-за дженериков По-твоему раст собирает все возможные варианты функций для всех возможных типов, удовлетворяющих дженерику? Ты чего-то не того поел.
>>1876330 Это очень крупыне проекты, своя специфика, и они были бы рады перейте на Rust
>>1876336 Когда либа конпеляется, емнип, она код дженериков оставляет as is, чтобы эти функции можно было конпелировать в твоем приложении с неизвестными на этапе сборки либы типами
>>1876353 Вот действительно - в крестах можно засунуть в хедер файл библиотеки тело шаблонной функции, что-бы она компилировалась вместе с программой. Можно ли так в расте? Вроде там есть для этого тип сборки
Аноны, а вас не смущает, что в последнее время даже зашкварные Кресты показывают больший прогресс, чем ваш Ржавый?
Сейчас смотрю достижения C++20 и вижу там корутины, концепты и compile-time функции, всё уже готовое к продакшну. Раст же только 2 года назад стабилизировал ебаные интринсики под x86, а вот aarch64 не юзабелен даже в nightly блеать, и его даже в планах нет.
Нахуа нужен язык, который даже в далеком будущем будет сомнителен со своими злоебучими лайфтаймами, и при этом не особо-то в это светлое завтра торопится? У меня, блять, ощущение, что у пидаров из Мазилы вся надежда на то, что придёт какой-то купившийся на их пропаганду долбоёб и сделает за них всю работу.
И что толку от языка, который по скорости разработки вровень к говну мамонта++, и уже годы при этом не может его толком заменить? Помню, предыдущая попытка заменить Кресты была в виде Dlang - тот тоже 10 лет топтался на месте прежде чем на него все забили. Может быть, он был нам предупреждением?
>>1877568 У меня еще много лет назад было сомнение, что перекладывать на программиста "сборку мусора" в виде лафйтаймов не лучшая идея. У меня было предположение, что сложность будет расти со сложностью программы, но доказать я этого не мог и не хотел.
Так что получилось, кто снял розовые очки, скажите, как раст пригоден в разработке крупного ПО?
>>1877780 > как раст пригоден в разработке крупного ПО? По-моему, крупного ПО (500KLOC+) на нём как не было, так и нет, так что всё чисто гипотетически. Точно могу сказать, что:
Реализация модулей у него лучшая, что я видел. Они настолько просты в обращении, что нормальный подход - начинать писать софт сразу выделяя подсистемы в модули, пока между ними не образовались паразитные зависимости. А когда модуль отправится в репозиторий, его очень легко будет версионировать, просто сделав нэймспейс v2 основным и в v1 вытащив неизменные части реэкспортом имён.
Инструменты, хотя бы для малых и средних проектов, просто приличные, но они идут вместе с компилятором, и образуют монокультуру, в которой cargo build соберет тебе почти всё что угодно.
Вместе это дает хороший задел на повторное использование кода, в противовес тому убожеству, что мы сейчас имеем в C++ и Go.
Но вот сам язык это пиздец - в нём нет lts релиза, в нём что-то постоянно ковыряют по мелочи, а важные фичи годами не вылезают из nightly. Положиться на него вообще нельзя - со временем неизбежно понадобится какая-нибудь nightly фича, и придется искать альтернативу среди библиотек, и трястись, чтобы с неё можно было перелезть на стандарт когда поспеет.
Как мне кажется, был бы язык с меньшими амбициями - что-нибудь уровня Go с вменяемыми дизайн-решениями - он бы сейчас Ноде трубу шатал. Ну а сейчас это все равно что дом без крыши, куда его такой?
На днях прошла новость, что в Nim сделали опциональную лычку на счетчик ссылок, позволяющую поклясться компилятору страшной клятвой, что вот этот вот объект не будет частью цикла и GC для него запускать не надо.
На бешеном многопотоке всё, конечно будет люто неэффективно (это можно несколько сгладить софтовыми транзакциями), но для 99% софта это означает почти полную безопасность (за исключением возможных утечек памяти) при потере производительности, эквивалентной одному-двум поколениям процессоров. И никакого 3x потребления памяти или бешеного stop-the-world. Кмк, вполне нормальный компромисс.
на бешенном многопотоке кроме как shared nothing в принципе ничего толкового не работает и все эти парадигмы мультитредингового программирования именно про "ООП-рыбку съесть и на бутылку не сесть".
Хотя ООП-рыбку есть не нужно а нужно конкретно и долго продумывать архитектуру и бизнес-логику что бы было shared nothing.
Но поскольку долго и вдумчиво зашквар, а рыночек так порешал что нужно быстро быстро и хуяквпродакшн, то имеем что имеем.
>>1877888 Шиндовс 95 был уникальной системой: на среднем писюке своего времени с 4МБ оперативки он работал прямо из свопа (после загрузки оставалось как раз те самые 400КБ). Смешной факт: штатно в этой системе нечем измерить объем свободной памяти. Потому что МС знают, что если бы было чем, то их бы ждали УНИЖЕНИЯ. А Дельфы 7 вышли в 2002, тогда меньше 32МБ уже было редкостью, всё больше 64-128. Короче, технических причин ненавидеть большие бинарники не было, просто мы тогда были злобными песдюками :)
>>1878936 Сидит мужик дома утром с бадуна, башка болит, денег нет. У жены просить бесполезно... Вдруг обращается к жене и говорит: — Маша, а ты читала вчера в газете о новой клинике? — Какой еще клинике? — А тут открыли новую клинику: переделывают члены на любой вкус. Всего 50 рублей стоит... — Да что ты говоришь?! На вот 50 рублей, иди и сделай себе подлинее. Мужик довольный, оделся, выходит, в дверях его останавливает жена и даетеще 50: — И попроси, чтоб еще потолще сделали. Мужик вышел, прошел с десяток метров, жена кричит с балкона: — Стой! Вот тебе еще полтинник, пусть сделают, чтоб еще изогнутый был, как в том немецком кино... Ну, приходит вечером мужик домой, бухой. Не успел порог переступить, а жена уже на него: — Ну что?! — Ох, Маша, не поверишь — такого красавца сделали: дли-и-инный, то-о-олстый... Начали гнуть — сломался! anekdotov.net
>>1879042 Жесть, возвращение без точки запятой, это же лютый треш и возможность wtf-ошибки по типу "==".
Я уже не говорю о возможности пересоздать переменную с тем же именем, опять же, банально на человеческом факторе и усталости можно словить лютую жопу, как в каком-нибудь динамическом языке.
>>1879090 Некоторые языки пиарятся что победили косяк "==" с человеческим фактором. А язык, который позиционирует безопасность, привносит сразу два а может и больше аналогичных костыля.
Очередная недальновидная хипстота а сейчас уже модное СЖВ гробит неплохой проект. Ведь тусовка важнее идеи.
>>1879142 >>1879090 >>1879016 >>1879149 >Как в расте создать массив в функции и вернуть его? >А вектор как вернуть? >Жесть, возвращение без точки запятой, это же лютый треш и возможность wtf-ошибки по типу "==". >Я уже не говорю о возможности пересоздать переменную с тем же именем, опять же, банально на человеческом факторе и усталости можно словить лютую жопу, как в каком-нибудь динамическом языке. >Некоторые языки пиарятся что победили косяк "==" с человеческим фактором. А язык, который позиционирует безопасность, привносит сразу два а может и больше аналогичных костыля. >Очередная недальновидная хипстота а сейчас уже модное СЖВ гробит неплохой проект. Ведь тусовка важнее идеи. LOL, школьник не знающий как возвращать значение рассуждает о дизайне языка.
>>1879676 Ну понятно, язык в котором два типа String::from("строк"), просто потому что так системно удобнее, чем практичнее. Или язык который возложили подобие гц через лайфтаймы на плечи программиста. Нужен он для чего еще, когда есть уже языки которые дают более лучший контроль на системном уровне и где ты сам можешь решить когда собрать свой мусор?
>>1879788 Гц через лайфтаймы на плечах конпелятора, а не программиста - это важный нюанс. И можно от него отказаться используя обёртки для счетчиков ссылок, прописывая статические лайфтаймы или поиграть с трейтами.
Строки - сложно, и лучше уж иметь их два вида, чем проебать важные нюансы на системном уровне и получить десяток библиотек которые решают этим проблемы.
Кто даст тебе лучший контроль на системном уровне вместе с гарантиями этого контроля?
Дорогой анон, помоги мне пожалуйста. Только начал ковырять rust и уже с час ебусь с какой-то элементарной задачей. Есть код https://pastebin.com/z8hRZ7fm , линтер ругается на 26 и 31 строки "cannot move out of `self.left` which is behind a shared reference; move occurs because `self.left` has type `std::boxed::Box<dyn Expression>`, which does not implement the `Copy` trait". Вопрос что мне делать?) Как лучше разрешить проблему? Если я добавляю имплементацию Copy, то линтер ругается на другие строки, и говорит, что Copy требует Syzed. Можете ссылочку там кинуть, где можно с вот этим всем разобраться