Это копия, сохраненная 20 апреля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
https://www.rust-lang.org/
Обязательно для прочтения: https://doc.rust-lang.ru/book/
Вместо шапки: https://gist.github.com/TatriX/183c816f1346d418f969c4576c2b9b41
Ресурсы на русском: https://rust-lang.ru/
Предыдущий тред: >>1756693 (OP)
У меня с растом какая-то странная история, я уже где только не добавился во всякие коммунити, но так и не начал ничего на нём писать.
пусть всегда будет 14, мне понравился
работы нет, одни лохчейны
>нормальные сервисы
Какие сервисы?
Либы экосистема для прода может еще и сырно вато, но особо не вникающему мимокроку написать рестик + фронт на последних высокоуровневых вас либах достаточно просто
Чёт лол с твоей уверенности что только у тебя не в рублях.
Порог вхождения слишком высокий, никто из треда не осилил.
При всей сложности языка, как только хочешь придумать клёвую зирокост ёба-абстракцию, тут же натыкаешься на то, что тебе нужны фичи типа GAT и специализации, которые хер пойми когда доделают и когда стабилизируют и приходится городить костыли.
По минусам могу сказать за себя:
- Сложно вкатываться, даже для программиста с опытом. Первую неделю-две боролся с компилятором и уродливом кодом. Потом в принципе пишется как и на каком-нибудь 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.
Но пока что вяло, сначала докожи. Не удивлюсь если этим занимаются уволенные из мозиллы.
>уволенные из мозиллы.
Из команды Rust в мозилле поувольняли в основном blmщиков.
Оказалось, что держать у себя в штате толпу ебанутых не то чтобы сильно выгодно, особенно на фоне кризиса:
https://dtf.ru/flood/201152-sluh-novyy-prioritet-disney-uvolnenie-sjw-rabotnikov
Ну хуй знает, в телеграме чат вполне живой.
че за хуйня
Эти чуть пояснили чутка про техническую часть
>>794774
>>790486
А вот тебе ещё сверху чуть более философских субъективных мыслей, может, что-то покажется интересным.
— Небольшое число вакансий
Любой условный мейнстримовый 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 прибила своими увольнениями.
Если совсем на это положить хуй, спустя пару лет можно обнаружить себя довольно в стороне от современных фич языка.
Эти чуть пояснили чутка про техническую часть
>>794774
>>790486
А вот тебе ещё сверху чуть более философских субъективных мыслей, может, что-то покажется интересным.
— Небольшое число вакансий
Любой условный мейнстримовый 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 и это считается нормальным?
В паре проектов без тестов я просто не мог ни строчки написать несколько дней, пока привыкал.
И ещё немного совсем субъективного:
- Местами странное развитие языка
Развитие самого языка иногда тоже вызывает вопросы: ключевые люди, сидящие на зарплате у 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 и это считается нормальным?
В паре проектов без тестов я просто не мог ни строчки написать несколько дней, пока привыкал.
Смотря где и для чего использовать, альтернатив много.
Для развития, можно Haskell навернуть, чтобы по-другому немного на тот же Rust взглянуть.
Можно не ебать себе мозг сомнениями и делать вещи на Rust, язык-то и правда приятный, даже если вокруг плюсовым кодом всё обмазано.
Если кто не знает, он разраб valgrind'а и один из немногих (в раст кор тиме наверное единственный, лол) кто умеет круто работать с профайлерами (которые он сам и создал) и оптимизировать потребление памяти.
auto иногда выдаёт охуенные типы, которые вообще не ожидаешь тут увидеть. Дебажить неправильный auto — это почти как дебажить UB.
какой мужчина.. пидарасты правда так выглядят?
Покайтесь, ибо грядет!
Я перекатился на гошку, так что можешь троллить меня дженериками и исключениями.
Осталось недолго, в Go 2.0 Роб обещал завезти полный фарш и заодно переписать компилятор. И кто будет смеяться последним, а?
Вот кстати нет. Бесит нотепад++ на минутном торможении на открытии всего лишь мегабайтных xml файлов с каким нибудь протоколом, а иде шустрые ваще.
Мозилка выкинула раст к хуям, у меня лишь один вообще вопрос, что стало с подвижками wgpu, их там тоже к хуям разогнали?
Не проще самому проверить?
> Following a very successful first foray into Rust we are migrating an established codebase from C to Rust, and building new functionality primarily in Rust.
Я хотел это сравнить с вакансиями на Хаскеле, но на удивление в вакансиях на Хаскеле есть требования к знанию Хаскеля. Тут же small, highly skilled team видимо совсем отчаялась найти себе программиста знакомого с языком, и ищут хоть кого-то, а языку его уже по ходу дела обучат.
Алсо, ткнул наугад в Issues https://github.com/rust-lang/rust/issues/76627 - эээ, борроу-чекер не работает? ват?
Так-то 11 миллиардов вызовов malloc в лоб - это хуёвая идея в любом языке, но, допустим, мне кое-что известно о этих объектах и паттернах доступа, что позволяет написать для них эффективный кастомный аллокатор. Но он не будет аллокатором общего назначения, он сможет работать только с объектами определенного типа и создавать/удалять их только в определенном порядке.
Получится ли его интегрировать в Rust, как это будет соотносится с уже реализованной в нём системой владения?
Система владения там относится только к ссылкам и по большей части с ней нужно ебаться, чтобы наоборот избежать работы с кучей и безопасно работать с переменными на стеке. Но есть одно большое но.
Аллокаторы в расте не стабилизированы (кроме случае если у тебя один глобальный аллокатор на всё приложение). Так что придётся вместо стандартных умных указателей и коллекций использовать самописные костыли.
> борроу-чекер не работает? ват?
Он работает. Просто в данном примере он более строг чем нужно из-за проблем с выводом типа в замыкании.
>Так-то 11 миллиардов вызовов malloc в лоб - это хуёвая идея в любом языке, но, допустим, мне кое-что известно о этих объектах и паттернах доступа, что позволяет написать для них эффективный кастомный аллокатор
Vec::with_capacity и не выёбывайся.
Если очень надо, то делаешь большой alloc() и субаллоцируешь как хочешь.
>Получится ли его интегрировать в Rust, как это будет соотносится с уже реализованной в нём системой владения?
Твой аллокатор вернет какой-то хендл, который будет единственным владельцем объекта наподобие Box. Детали зависят от того, что тебе реально нужно. Один из вариантов: https://ferrous-systems.com/blog/zero-sized-references/
А можешь объяснить что конкретно там произошло? Почему ошибка борроу-чекера а не тайпчекера? И в чем там проблема с выводом? У f1(v: &str) указан тип аргумента, какой там может быть другой тип в замыкании и как это может повлиять на борроу-чекер?
>Vec
Сколько в него лезет, если речь идёт об объектах переменных размеров, лежащих в куче?
>Твой аллокатор вернет какой-то хендл, который будет единственным владельцем объекта наподобие Box.
Да, как-то так себе и представлял.
Ого, это ты так в виде P-схемы решил код с камментами заебашить? Выглядит круто...
Там скорее всего очередное проявление хронической болезни раста - борроу чекер иногда (в основном если там несколько времён жизни и они как-то взаимосвязаны, т.е. одно зависит от другого и т.п.) выводит слишком большое время жизни у ссылок в аргументах функций. Чтобы сделать борроу чекер безопасней у него есть правило - если точный лайфтайм вывести невозможно, бери самый большой. Тут судя по всему он выводит лайфтайм у аргумента равный замыканию (несмотря на то, что внутри замыкания аргумент никак не сохраняется) и потому получается ошибка.
Я правильно понял, что rule of thumb - указывай типы переменных в замыканиях и будет счастье?
Алсо еще вопрос. Как в Rust с асинхронностью? В Хачкеле асинхронность типа совсем прозрачная, т.к. всё ранится в IO и отдельная async-монадка не нужна, в Шарпе есть встроенная async-монадка через async/await, в Скалке/F# через for comprehension/computation expressions, как там в Расте?
Как я понял из гугления, нормальный функтор в Расте написать низя: https://github.com/rust-lang/rfcs/issues/324 (или уже можно: https://docs.rs/functional/0.0.5/functional/trait.Functor.html), т.к. нет абстракции по типам высших порядков. Значит должна быть какая-нибудь встроенная хуйня, и она, похоже, есть https://rust-lang.github.io/async-book/01_getting_started/04_async_await_primer.html
Насколько это монадка и насколько хорошо она играет с растовскими правилами владения? Ведь асинхронная монадка - это по идее пиздец, состоящий чуть менее, чем полностью из замыканий. Насколько этим удобно пользоваться в Расте по сравнению с другими языками?
> указывай типы переменных в замыканиях и будет счастье?
Нет. Эта ошибка немного другого толка, и скорее всего её быстро исправят.
> Как в 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),а всё остальное идёт лесом.
[1]: https://without.boats/blog/futures-and-segmented-stacks/
[2]: https://smallcultfollowing.com/babysteps/blog/2019/10/26/async-fn-in-traits-are-hard/
> указывай типы переменных в замыканиях и будет счастье?
Нет. Эта ошибка немного другого толка, и скорее всего её быстро исправят.
> Как в 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),а всё остальное идёт лесом.
[1]: https://without.boats/blog/futures-and-segmented-stacks/
[2]: https://smallcultfollowing.com/babysteps/blog/2019/10/26/async-fn-in-traits-are-hard/
> который работают только на одном рантайме, а на любом другом не запустятся
> два самых популярных рантайма (async-std и tokio),а всё остальное идёт лесом.
Ах да, чуть не забыл. Даже если две библиотеки используют один и тот же рантайм, но несовместимой (с точки зрения semver-семантики) версии, то это считается как два разный рантайма и программа работать не будет, лол.
Можно даже писать без привязки к конкретной реализации, задавая нужную через cfg или выбирая прямо в рантайме.
Я уже отъюзал, правда пока только для sse
На нем частично Firefox написан. Facebook свой пакетный менеджер на нем пишет. Ну, всякие npm и Dropbox его тоже используют.
Если ты так любишь функциональщину, то смотри в сторону frunk:
https://docs.rs/frunk/0.3.1/frunk/
https://jobs.apple.com/de-de/details/200170723/software-engineer-networking-privacy?team=SFTWR
Спасибо. Но я склоняюсь к тому, что на любом языке надо писать в
идиоматичном для него стиле. Я на Rust стал смотреть именно потому, что у меня возникло подозрение, что он из коробки может лучше подходить для моих задач.
Кстати, тут писали, что Rust очень мендленно конпелирует. Насколько актуальная эта проблема? Хаскель тоже медленно конпелирует, но там никто не пересобирает проекты по миллиону строк, проект разбивается на пакеты и модули, в процессе разработки перекомпилируют только модули, над которыми в данный момент ведётся работа.
Т.е. скорость работы конпелятора Rust - это реальная проблемма, или это просто следствие неправильного подхода к разработке некоторых разработчиков?
> Как с этим в Rust?
Подойдёт любой профайлер для С/С++ кода. Раст умеет создавать дебаг-информацию для релизного кода (но по умолчанию вроде не создаёт, нужно включить в cargo.toml) и из неё профайлер и возьмёт имена функций.
> И еще вопрос: как в Rust обстоят дела с профилированием программ? В Хаскеле профилирования де-факто нет. Т.е. формально оно там как-бы есть, но для профилирования программа конпелируется в специальном режиме, который херит большинство оптимизаций. Т.е. профилируешь ты там вовсе не то, что будет реально работать в продакшене, а какую-то совершенно другую программу, которая по определению раз в 10 медленнее и никогда не будет использоваться.
Как бы так всегда. В vs даже два разных режима компиляции: debug и realese.
Ну не скажи. В Java есть stack profiler, который вполне адекватен, не раз им пользовался. Он реально показывает чем занимается программа. В C# вроде тоже адекватный профайлер хотя не писал на нём уже лет 10, забыл всё, но вроде помню, что мне удавалось с помощью него находить узкие места и оптимизировать.
В Хаскелле единственный адекватный профайлер - это запуск с +RTS -T -s. Да, он покажет статистику по мусоросборнику, количество аллокаций, время мутатора и время коллектора. Но он не показывает, что именно аллоцируется. Чисто инфа, что твоя программа аллоцировала столько-то гигабайт, столько-то было скопировано в следующее поколение, заняло столько-то времени, общая статистика без конкретики.
А если хочешь узнать, какие именно объекты были аллоцированы, нужно перекомпилировать программу в другом режиме. И он, сука, вообще не имеет никакого отношения к продуктовой конпеляции, даже близко не похож. Он генерирует совершенно другой код, который может быть на порядки медленнее, чем продуктовый. Пытаться оптимизировать этот код вообще бессмысленно, ты просто две совершенно разные программы оптимизируешь, скомпилированные по совершенно разным правилам.
Да, может быть в Джаве есть какие-то тонкие моменты профилирования, которые ломают некоторые оптимизации если ты хочешь собрать слишком много информации, но в целом выхлоп примитивных профайлеров вполне адекватен. В Хаскеле любая попытка получить больше информации, чем просто статистика мусоросборника, ведет к генерации абсолютно неадекватного кода.
>Т.е. скорость работы конпелятора Rust - это реальная проблемма, или это просто следствие неправильного подхода к разработке некоторых разработчиков?
Он выплевывает тонну почти неоптимизированного IR, с которым тяжело работать. Но инкрементальная сборка тоже есть.
https://github.com/mrDIMAS/rg3d
https://github.com/mrDIMAS/rusty-shooter
> Давайте запили движок и редактор уровня юнити, и раст захватит мир.
https://github.com/mrDIMAS/rusty-editor
> mrDimas
Прорекламитья решил, димасик?
какой то крутой чел, в ларианах работает надеюсь бг3 нормальными инструментами делают
Я совсем начинающий растаман, но возможно тебе стоит вкатиться в вебприложения на wasm.
надеюсь один сетевой американ провайдер решит раст применить вместо ноды старой и противного golang'а))0
Перекатывайся на seed.
Работает (с недавних пор даже оффициально [1]) на АВР. А какие ещё 8-битники популярные есть? Мне на ум только стм8 приходит, но он анально отгорожен и для него нет бэкенда для ллвм.
[1]: https://github.com/rust-lang/rust/pull/69478
>Т.е. скорость работы конпелятора Rust - это реальная проблемма, или это просто следствие неправильного подхода к разработке некоторых разработчиков?
Инкрементальная сборка есть, но если ты меняешь что-то в ядре (либа, от которой зависит ещё куча либ), то оно всё будет перекомпилироваться. Ну либо юзай sccache, чтобы не перекомпилировалось постоянно.
Есть ещё проблема в том, что каждый раз когда обновляешь компилятор, тоже надо будет всё перекомпилировать. Это не так больно на stable, а вот если ты на nightly и постоянно его обновляешь, тогда неприятно.
https://www.tiobe.com/tiobe-index/
К 2050му глядишь и вижуал бейсик догонит
Завтра!
Психологию.
Куда?
> Contribute to the development of new tooling with Rust and 3D graphics drivers with C++
> Пытаться оптимизировать этот код вообще бессмысленно, ты просто две совершенно разные программы оптимизируешь
Добро пожаловать в native и runtimeless. Это же не байткод гонять.
Норм синтаксис. У крестов всратее.
>Почему у раста такой всратый синтаксис, посоны?
Два пикрандома из гугла. Что тут всратого? Что из того что ты тут видишь "всратого", нет в тех же плюсах, жаве или шарпе?
У растеров есть привычка вызывать несколько функций на одной строке, например. Но это нормальная практика и для жсеров и для хаскелистов и для других функциональщиков. И это, кстати, тоже может быть решено правильной структурой программы.
Так же есть некоторые фичи раста, которые позволяет наоборот количество кода сократить. Разница между инструкцией и значением например, хорошая фича, позволяет некоторые решения сделать очень элегантными. Или что каждая конструкция языка может возвращать значение, тоже приятная фича, которую хочется в других языках.
>У растеров есть привычка вызывать несколько функций на одной строке, например.
>Но это нормальная практика и для жсеров и для хаскелистов и для других функциональщиков.
Ну вот, говнарь сам честно признался. "Нормальный" синтаксис... для жээсеров (лол) и прочей говношвали мразотной. Именно это и всрато, дерьмо, как и ты, и все растеры, одна и та же грязь.
>У растеров есть привычка вызывать несколько функций на одной строке, например.
>Именно это и всрато
Ну так не пиши так, в чем проблема?
>для жээсеров (лол)
Ещё один окатыш с бинарным мышлением. По ключевым словам тригеришься, долбоёб?
>и прочей говношвали мразотной
>дерьмо, как и ты, и все растеры, одна и та же грязь.
Да у тебя пердак рвёт не на шутку. Rust твою мамку трахнул генгбенгом? Или может отца? Почему ты так злишься?
Так и запишем: Раст - параша для жээсеров и хаскелочуханов.
И откуда берется отрицание, что это всратое дерьмо, если прямо сказано что это всратое дерьмо?
>Так и запишем
Куда ты там что записываешь, придурок? Воображение опять разыгралось? Прости, но мнение умственно отсталых тут никому не интересно.
>Раст - параша для жээсеров и хаскелочуханов.
И что ты ТУТ делаешь в таком случае, обиженка? Пиздуй в свой тред по delphi и php, неосилятор хуев.
Да мы и не отрицаем, нам просто нравится так писать и на за это не платят хотя мне платят и неплохо.
Консилиум шизов решил, что это "всрато" выглядит.
ебанько решили что 1 строчка 1 метод и ниибет
Что-то идея прям говняно работает, вообще ничего не подсказывает толком. Где интелисенс нах?
>аче,звучит по unixlike-ски
Ну да, мышка же в линухе не поддерживается. Поэтому приходится нампадом себе очко разрабатывать. Зато лучше всех играю в мортал комбат. Комбины такие мучу, охуеешь.
Я так понимаю (сейчас перечислю свое виденье, если ошибаюсь поправьте и добавьте, что знаете вы)
Это три конкурирующие либы для асинхронного программирования.
Первые два предлагают зеленые треды на пуле потоков, актикс - однопоточная асинхронщина.
Использовать одно из другого невозможно? Или можно как-то обернуть? Мне бы очень хотелось в actix-web использовать кое-что из async-std.
Актикс сделан поверх токио, так что в этом списке он лишний.
А асунк-стд и токио - это две конкурирующие реализации рантайма для асинхронных функций (т.е. той части, которая непосредственно их запускает) в расте, поскольку в стандартной либе никаких рантаймов нет. Зачастую выбора особо и нет, поскольку рантаймы друг с другом несовместимы и много библиотек работают либо только с токио, либо и с тем и другим, так что в 90% случаев будешь выбирать именно токио.
А чем тогда занимается actix-rt? rt же я так полагаю, расшифровывается как рантайм?
Почему Токио, а не стд?
> А чем тогда занимается actix-rt?
Раньше он и содержал в себе собственный рантайм, а потом решили переехать на токио и сейчас он представляет из себя просто обёртку над ним.
> Почему Токио, а не стд?
Так сложилось исторически. Какой выбрали, на тот и переехали.
А его нужно как-то отдельно настраивать?
Оно вообще ничего не проверяет и не подсказывает, только подсвечивает синтаксис, устанавливает зависимости из cargo, иногда жалуется на кусок кода, который на самом деле норм.
Может переставить или что... Пользоваться невозможно.
А вот посоаетованный Vs code из коробки завелся и все вроде ок.
Idea, Eclipse, Emacs, Vim - это не про написание кода, это про секс. Про жесткий секс. На то программисты и анальники - им нравится когда их ебут. Когда они пыхтят, когда им неудобно, когда что-то отваливается и это надо чинить (желательно самому), когда что-то не работает из коробки, или работает но плохо.
Если же тебе просто хочется код писать - VSCode, Visual Studio, Sublime Text. Они покроют 99% твоих потребностей.
500+ страниц как трахатся с комбайном, да растбук где то столько же весит
I bless your computer, my child!
никогда не жаловался в не туда
прыгает по референсам збс
сам раскрывает макросы, что для меня существенно
подсветка несуществующих идентификаторов ебанутая, да
но в целом мне норм
вскод могёт почти всё то же самое, кроме скакания по макросам, больше ничего против не имею
Ты так говоришь, как будто раст учится быстрее вима. Но это нихуя не так. Вим — это раст в мире текстовых редакторов: он охуенный, но не все в него могут.
>Когда они пыхтят, когда им неудобно, когда что-то отваливается и это надо чинить (желательно самому), когда что-то не работает из коробки, или работает но плохо.
>Ты так говоришь, как будто раст учится быстрее вима.
Типичный программист-анальник. Тебе в кайф пыхтеть?
Вим это устаревшее говно. Оно живо только благодаря тому, что есть узкое место для применения (адм. серверов) и программистам-анальникам, которым нравится быть "нитакими" и пыхтеть когда им в задницу засовывают неудобства.
Вот хорошее мнение почему vim морально устарел: https://tonsky.livejournal.com/314598.html
А если ты Vim переделываешь под себя, то какой смысл юзать его, а не, например, VSCode, Atom, Sublime Text?
>он охуенный, но не все в него могут.
Он вообще не охуенный, ты им пользуешься только потому что "не все в него могут".
В жыдее всё ископобки и никакого пердолинга.
> VSCode, Visual Studio, Sublime Text
Мне нужна среда для работы с кодом как с кодом, а не с портянкой буквоговна на форуме, а все эти блокнотики-разукрашки, идейно вышедшие из notepad++ именно так с ним и работают.
>Мне нужна среда для работы с кодом как с кодом
Ты хочешь сказать, что в этих редакторах не плейн текст?
Если да - то ты просто нихуя не понимаешь, сразу мимо иди.
Если нет - то к чему этот высер? Какая разница в каком редакторе редактировать/писать код?
хуйню сказал. Vim мне позволяет делать свои задачи быстрее. Если тебе он кажется неудобным, то окей, не пользуйся.
>Vim мне позволяет делать свои задачи быстрее
За счёт чего? Ничего конкретного ты пока не сказал, кроме абстрактных обтекаемых фраз. Как и любой идолопоклонник.
>Visual Studio
>а все эти блокнотики-разукрашки, идейно вышедшие из notepad++
сразу видно зумерка-долбоеба. на вижуал студии люди софт делали ещё когда ты соплей у своего бати на конце висел.
>Вот хорошее мнение почему vim морально устарел
Сейчас бы в 2020 мнение всяких петухов в жж читать.
>пукнуть гринтекстом ссылаясь на авторитет анонимной борде
Ой, не конструктивно, да? То ли дело назвать кого-то петухом. Это совсем не апелляция к личности. Ты плывёшь, дурик. Ищешь за что бы зацепиться, но всё мимо. Манямирок трещит по швам?
Ну, давай по пунктам:
>Вим это устаревшее говно
Да, поэтому я пользуюсь neovim'ом.
>А если ты Vim переделываешь под себя, то какой смысл юзать его, а не, например, VSCode, Atom, Sublime Text?
VSCode написан на электроне, работает со скоростью улитки и жрёт оперативку, а чтобы сделать в нём нечто нетривиальное (вроде блочного visual мода), надо обмазаться плагинами на ебучем JS тайпскрипте, которые работают ещё медленнее, потому что электрон.
Atom не пользовался, ничего не могу сказать, не считая того, что про этот редактор мало кто слышал.
Sublime Text надо покупать, чтобы не приходилось щёлкать мышкой на ебаные "у вас триал: |да, не буду платить| - |нет, не буду платить|". Да и rust-analyzer на нём без плагина. Ну и VSCode тупо лучше во всём, хотя и жрёт чуть больше оперативки и работает медленнее.
Вим проще кастомизировать по сравнению с другими редакторами, потому что у этих редакторов нет трёх различных модов, и надо обмазываться контрольными кнопками в одном Insert моде.
К тому же, мне тупо удобнее делать всё клавиатурой вместо мышки, потому что после геймерского прошлого у меня туннельный синдром на правой руке, а все редакторы кроме вима идут с кучей кнопок, на которые надо щёлкать мышкой.
>Он вообще не охуенный, ты им пользуешься только потому что "не все в него могут".
Нет, он просто охуенный и удобен конкретно мне.
>Манямирок
Ну разве что у Вас, ведь это Вы всяких петухов сюда притащили. Нормальным людям в 2020 не нужно читать мнения петухов, чтобы выбрать редактор кода.
>То ли дело назвать кого-то петухом.
Не могу себе в таком отказать.
>VSCode написан на электроне, работает со скоростью улитки и жрёт оперативку, а чтобы сделать в нём нечто нетривиальное (вроде блочного visual мода), надо обмазаться плагинами на ебучем JS тайпскрипте, которые работают ещё медленнее, потому что электрон
Так себе аргумент, не пишите код на смарт-чайнике через терминал.
>VSCode написан на электроне, работает со скоростью улитки и жрёт оперативку, а чтобы сделать в нём нечто нетривиальное (вроде блочного visual мода), надо обмазаться плагинами на ебучем JS тайпскрипте, которые работают ещё медленнее, потому что электрон.
Это такая же субьективщина как и то, что тебе удобен Vim. Потому что у меня, например, тот же VSCode работает быстро и без нареканий. Задержки при печатаньи, как в том же Atom нет. Вот прямо сейчас открыл свой проект, внутри которого код на HTML, CSS, TypeScript, JavaScript, JSON, Rust, SQL и куча расширений для поддержки всё этого и удобного программирования. Памяти жрёт ~600мб. Но где я ещё найду редактор, который нормально поддерживает всё это и при этом, в общем то, не тупит?
>Atom не пользовался
У атома есть беда именно с производительностью. Но он довольно популярен, кста.
скорее потому что ты нищеброд и у тебя нет нормального компа для работы браузера с текстовым полем
У меня 16 ядерный топовый амд на одной машине и топовый i7 на другой. Ну и раз уж на то пошло, лучшая реализация вима это evil-mode
>>819057
>>819058
хуя вас порвало.
>Хватит уже бомбить на vim
ну да ну да, это мы бомбим.
вас уже на пол треда разворотило от одной картинки с радугой.
извините если задели ваши чувства.
>не забудь еще парочку анальных зондов от майков себе в жопу поставить :)
где зонды? покажи, ткни, пиздабол.
>У меня 16 ядерный топовый амд на одной машине и топовый i7 на другой.
да мне похуй, если честно. но если у тебя при таких системках вижал тормозит, то у тебя просто руки-крюки. по другому это не объяснить.
>где зонды? покажи, ткни, пиздабол.
https://github.com/microsoft/vscode/issues/49161 Вот, даже и искать долго не пришлось.
> да мне похуй, если честно. но если у тебя при таких системках вижал тормозит, то у тебя просто руки-крюки. по другому это не объяснить.
Ну а как же "нинада настраивать"? Судя по количеству пользователей idea, большинство людей просто привыкло к тому, что софт тормозит.
>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
Ага, правда, чтобы найти эту челику пришлось ищую на гитхабе создавать, нигде явно об этом в вскоде не сообщается.
Вот только это не в поисковике.
>idea
хз, у меня 8 сандальных ядер и 48Г оперы (4Г дал идее на кучу), полёт норм. Открыто 3-4 проекта обычно.
Что в ней нравится - сама находит либы для импорта. Пишешь вызов, она подсвечивает красным и предлагает импортнуть. А ещё есть локальная история, когда не коммитишь правку каждой строчки, но в ide можешь отмотаться назад к любому состоянию.
да суперпроизводительность не слишком часто нужна, точнее она редко нужна
Ну так надо было качать VS Codium, а не VS code (это как хромиум и хром)
Как у нее с интроспекцией и настраиваемостью?
Емакс умеет все вышеперечисленное.
Вообще вся хуйня в lsp сервере. rust-analyzer Умеет в автоимпорт, но обсирается на goto-definition постоянно и крашится. rls в автомипорт не умеет, но гораздо шустрее и не так часто крашится.
c идеей какой нибудь в разы меньше жопоебли, хотя я предпочитаю что то более легковесное типа вскода а комбайнами пользуюсь когда ну очень надо
С ним что-то не так?
С ним ещё больше ебли.
Что не так с лиспом? Лучше лисп машины для динамического окружения может быть только равзе что смолтолк.
>Что не так с лиспом?
Сначала скажи что с ним так.
>Лучше лисп машины для динамического окружения
На основе чего ты это решил?
>может быть только смолтолк
Это тот полумёртвый язык, единственная адекватная реализация которого обновляется раз в 2-3 года? Он лучше чем лисп, да? Приму к сведению.
> Сначала скажи что с ним так.
Самый удобный синтаксис для редактирования. См paredit/smartparens.
Гомоиконичность и вытекающая из нее возможность добавлять почти любые модные фичи.
> На основе чего ты это решил?
На основе того что попробовал кучу вариантов.
> Он лучше чем лисп, да?
Я не говорил что смолтолк лучше как язык. Я говорил про среду. Рефлексивность это то, что лично мне очень нужно, и единственная реально юзабельная реализация этого — Емакс.
Балдёж
Всплакнул
Это RA, а не RLS.
И без CoC ты хуй при наведении мышки чего сделаешь. Православно прикрученный работает с нажиманием клавиши, а не с наведением мышки:
>nnoremap <silent> K <cmd>lua vim.lsp.buf.hover()<CR>
Перед каждым использованием vim нужно вводить капчу. Это настолько мощная программа, что человечество пытается ограничить возможность использования её искуственным интеллектом и злоумышленниками. В ней можно писать текст, редактировать его, перемещаться по файлу, настраивать редактор, выделять текст и всё это в разных режимах! В общем-то это достоинство перекрывает все недостатки vim, о которых пишут аноны выше.
Господь бог знает, что может случится если эта технология попадёт в руки ИИ или мусульманских радикалов, вроде ИГИЛ (запрещенная в России экстремистская организация).
Да ты же поехавший. Кстати в Емаксе есть vim-captcha-mode который запускает вим в емаксе и вводит капчу автоматически
А ещё ходят слухи, что скоро на вимскрипте допишут автоматический вводитель капчи, и её не надо будет вводить руками! Всего пять часов брутфорса и готово!
ахаха, ну прям затроллел. ахаха
xi
https://www.roi.ru/71821/
Я джавист вообще, наткнулся и принёс сюда. Когда-то видел аналогичную петицию про D.
аби только нет еще
Дропнул доизучение крестов в пользу rust. Писать код всяко посложнее сначала, но когда начинаешь думать в нужном русле - становится очень просто.
Опять ты говноед с Си треда припёрся сюда.
https://habr.com/ru/post/520880/
Вот бы они сделали чтобы rust-analyzer не крашился от каждого чиха уже.
Просто в расте программисты умеют решать проблемы сами, без гугла.
Тем не менее, он в хорошей компании. А вот почему его стали меньше гуглить.. Закончились каникулы? Сокращения мозиллы затронули 30% всех писавших на расте? Американским растоманам некогда программировать - заняты на блм митингах?
есть за что критиковать, но если критиковать адово перегруженные спец правилами на каждый чих плюсы то талмут выйдет размером с томик войны и мира
рыгане
Немного, ага.
Автор curl будет пилить новый основанный на https://github.com/hyperium/hyper бэкэнд для собственно curl.
>switched-to-hyped-technology
вы уж блядь определитесь хайповая технология или никому не нужный мертвый язык
Имея такое количество юзеров и столько опыта, прожженный сишник видит смысл в расто-бекэнде ради memory-safety. Думаешь он тоже решил присесть на мертворожденный паравоз хайпа?
Хайп как акт некрофилии
Фаззинг для си-говноедов, раст незачем фаззить, он неуязвим, если код писал не упоротый ебанат, нарочито плодящий бэкдоры для АНБ =)
Ну так сломай hello world. Очень интересно увидеть.
>У меня с растом какая-то странная история, я уже где только не добавился во всякие коммунити, но так и не начал ничего на нём писать.
Аналогично
Заорал
>Сложный, слишком низкоуровневый, долгая компиляция, сырой, так себе альтернатива плюсам, unsafe не панацея
>Что-то вообще на критику не похоже
Растамане держатся до последнего.
А как надо критиковать? Покажи.
>Сложный
Плюсы сложнее.
>слишком низкоуровневый
Покажи в ассемблере трейты и енамы
>долгая компиляция, сырой, так себе альтернатива плюсам
Допилят. Если есть что-то конкретное, то напиши RFC или отправь пуллреквест сам, в процессе можешь вообще решить, что и без этого можно обойтись.
>unsafe не панацея
Делать хорошие интерфейсы для библиотек тяжело, кто бы мог подумать. В плюсах вон уже 20 лет с инвалидацией итераторов ничего сделать не могут. Там просто решили, что и так сойдет.
Наоборот похоже на сглаживание штрихов растафилами.
Там куда серьезнее проблемы есть, о которых узнаешь когда потратишь тонну времени на сие чудо.
Главный минус раст - на нем не пишут реальные проекты. Это язык фанбоев. Да он крутой, да, безопасный, но язык нужен не сам по себе (хотя сам по себе тоже нужен - в академических целях, чтобы его идеи потом вошли в какой-то следующий более популярный язык), он нужен для того, чтобы на нем реальные задачи решать. Писать программы, которыми пользуются. Большая часть софта, которым пользуешься ты - это плюсы/джава/питон - и да - пхп.
У раста есть только экспериментальный движок для фаерфокса, единственный большой проект, и то - команду уже вроде как разогнали из мозиллы.
А куча мелких и средних проектов уже не считается? Если на языке не написан браузер то все, пиздец?
потому что мелкий проект можно переписать хоть с нуля, если это потребуется.
Я не против раста - отличный язык, но пока не промышленный ни разу. В большинстве прикладных задач его берут просто потому что нравится он кому-то из команды. Ну и пропиарится тоже - компания говорит - у нас есть Раст - и к ним идет толпа молодых романтиков-программистов.
Никто внезапно не ебанёт огромный проект за полгода.
> Большая часть софта, которым пользуешься ты
Была написана/начата очень давно.
И давно это можно переписывать проекты с нуля? Если ты в гроб-кладбище-пидор банке, то конечно, можно и переписать. А если ты стартап, то второго шанса может уже не быть.
>Если ты в гроб-кладбище-пидор банке, то конечно, можно и переписать. А если ты стартап, то второго шанса может уже не быть.
У тебя какие-то странные представления о стартапах и банках.
В банке тебе чтобы выбить бюджет на "переписать с нуля" нужно на одной ноге с околотопменеджментом быть. Если что-то внедрено - нужна ОЧЕНЬ серьезная причина, чтобы делать что-то вне рамок багфиксинга/микро новых фич.
А вот в стартапах наоборт. Хуяк-хуяк, микросервисы в продакшн, презентацию показали, новый раунд инвестиций дали, можно нанять +10 человек и кинуть ресурсы на переписывание с нуля.
Открыл доки. Повторил пример.
>for stream in listener.incoming() {
method not found in `std::result::Result<std::net::TcpListener, std::io::Error>`
Простите, чего? У раста доки не актуальные? Охуенно
Да, убрал, потому что в каком-то древнем расте было по-другому, у меня тулчейн стоял с хуй знает каких времён. Обновился, всё ожило. Спасибо.
>долгая компиляция
>Допилят
Не допилят. Нет ничего такого, что помогло бы всерьёз компил разогнать. Максимум выжать незначительные проценты. Компил всегда будет таким долгим из-за архитектура компилятора. Бесконечные зависимости для каждого пакета - окончательное потуги в этом направлении убьют.
>Если есть что-то конкретное, то напиши RFC или отправь пуллреквест сам
>в процессе можешь вообще решить, что и без этого можно обойтись.
Поэтому и
>сырой, так себе альтернатива плюсам
Брать это говно в продакшн, где ещё самому надо его допиливать - нет, спасибо.
> Покажи в ассемблере трейты и енамы
Решил дурачком прикинуться? Ещё кроме трейтов и енамов есть какие-то нормальные абстракции? ООП? Наследование может быть? За счёт отсутствия небесплатных абстракций раст и низкоуровневый.
>unsafe не панацея
>Делать хорошие интерфейсы для библиотек тяжело, кто бы мог подумать
К чему это?
>Плюсы сложнее
Сложнее за счёт чего? Следование небольшому своду правил или паттернов убивает необходимость юзать Rust.
>ООП? Наследование может быть? За счёт отсутствия небесплатных абстракций раст и низкоуровневый.
Здесь нет ООП, потому что разработчики решили, что оно не нужно, а не из-за низкоуровневости. С этим можно спорить, но точно также, например, подумали в Го.
>К чему это?
Если unsafe протекает из библиотеки, то это проблема библиотеки. В биндинге на Питоне тоже можно накосячить, но никто не говорит, что он небезопасный.
>Следование небольшому своду правил или паттернов
Своду из нескольких сотен правил, про большую часть которых ты не поймешь, пока их не нарушишь. Ну и куча эзотерики типа SFINAE.
>Здесь нет ООП, потому что ...
Потому что это противоречит философии языка. Не должно быть ненулевых абстракций. Rust это не плюсы, а си на максималках. По задумке, разумеется.
>Если unsafe протекает из библиотеки, то это проблема библиотеки.
Сам ансейф и его концепция не без греха. В статье об этом сказано подробней.
Ты все перепутал. Как раз в банке тебе никто не даст переписать с нуля ничего, у них работало раньше на джаве 1.5, зачем им бизнес-риски? Ты пойди еще найди 10 раст разработчиков, а стартап как раз таки должен быть гибкий - там за код не держатся, если надо - можно выкинуть и переписать
- Да
- Раст
В основном когда ты дергаешь unwrap() или a[a.len()]
обычно на найтли частенько выходит ICE, можешь сам посмотреть на гихабе
Привет Аноны, подскажите, зачем тут части кода выделены в отдельные блоки?
Трюк для того, чтобы reader был освобождён до выхода из функций. А вот зачем конечно - видать программисту так захотелось.
Это может быть код, написанный до non-lexical lifetimes, и тогда это была ошибка компиляции.
Есть создаю Message на основе header со значением 0, то вывод следующий:
Creating ping
Received ping;
Если header== 1, то вывод следующий:
Creating rq;
Received ping;
Почему? Я что-то успускаю в енумах или просто промахнулся где-то?
В первом матче process_message не вызвал, но он на самом деле снаружи вызывается всё равно, во втором матче вызов появился в процессе отладки.
Книжку тоже читаю, но попутно разбираюсь и ручками.
Потому что "Ping" у тебя — это переменная, а не вариант енума. Если бы ты clippy запустил, тебе бы рассказали, что "Rq =>" ветка недостижима.
Вот это, кстати, косяк. Тоже на таком подрывался. Нужно было в синтаксисе чётко отделить переменные от енумов. Например, ключевым словом var или тип того.
>тебе бы рассказали, что "Rq =>" ветка недостижима.
Да мне и компилятор выдал ворнинг на этот счёт, а я не всмотрелся.
Но спасибо.
Вот захотел я переписать свой компилятор с хаскеля на раст ради скорости и устранения повсеместной ленивости. Есть нормальный аналог хаскелевского megaparsec и нормальная обертка над LLVM? Алсо, хотелось бы переписать с си рантайм, в расте как с ручным управлением памятью, сильно больно свой GC писать будет?
Хаскель прекрасен, но тормознут, раст представился альтернативой, заодно решил от других зависимостей вроде си попробовать избавиться, как вы поняли, вероятно. На крестах реализовывать вывод типов хаскелеподобного языка больно, я пытался, раст за счет адт и паттерн матчинга в этом получше должен быть
Написал на хачкеле
@
Хорошо, но медленно
@
Переписать не сможешь
Так, а как же мантры о том, что хачкель лучше всех выражает сайд-эффекты? Вот тебе нужен такой эффект, как неленивость и вытекающая отсюда эффективность. Давай, вырази это.
Ну, есть несколько крейтов для этого на расте. Но тут сильно зависит от того, какой именно GC тебе нужен.
В идеале, мне нужно написать свой интерфейс GC, а потом на его основе наделать несколько GC вроде CMS и G1, но на этот раз на расте. А можешь, пожалуйста, перечислить эти крейты? Интересно на них глянуть.
>>834483
Жирным долбоебам этот вопрос адресован не был. Съеби, быдло.
Я более-менее понимаю, как работает хаскель (провел в его гитлабе и за его системой типов не один вечер), поэтому и спросил про раст как про родственный, но более производительный ЯП. Но тут прилетел этот бесполезный кусок ржавого дерьма выше и начал кукарекать. И вот из-за таких воняющих на весь тред пидорасов и отношение к технологиям соответствующее. Я, блядь, хоть раз что-то сказал про то, что хаскель лучше всех, долбоеб? Можешь засунуть свой язык назад в свою же задницу и спиздовать отсюда.
В первый раз так горит с мудаков в программаче, он же блядь позорит раст комьюнити
а конкретно проблема производительности связана с алгоритмом вывода типов (решения constraint-ов) у хаскеля, я взял своему языку ту же систему OutsideIn(X), но пытаюсь сделать растоподобный синтаксис и мутабельность вместе с частью охуенности системы типов хаскеля, уже срал вопросами по теме в программач же, но как-то беуспешно.
>он же блядь позорит раст комьюнити
Тоже мне, блядь, проблема.
Ты бы ещё больше скрытого текста ебанул.
Ну, вообще, я не смотрел на GC в расте, мне не нужно было, но просто идёшь на
lib.rs
и там ищешь "gc" или "garbage" или ещё чего-нибудь вроде этого.
Хотя мутабельность ты с хачкелем не подружишь, скорее всего, там же сразу линейные типы ебало бьют за мутабельность, нет?
У меня создаётся впечатление, что ты контуженный дебилговно, который раз в год делает очередной проект всей своей жизниговно, который из года в год не взлетаетговно.
Ну вот нахуя ты делаешь очередной никому не нужный ЯПговно и компилятор к нему? Не проще ли помочь хаскелю или расту в этих областях? Или ты слишком тупговно для такого и только и можешь пилить свое поделиеговно, а код там такой что все бабы сраки со всего района лезли в него, чтобы найти куски говна своего, но находили только твой код? Зачем говно? Говно не нужно. Надо меньше говна. А без говна будет менее говенно. Говна хватает. Все испускают говно. Надо уменьшать количество говна. Долой произвольную дефекацию. Долой говно. Ты меня понял?) Вот.
Меня больше интересовало, нет ли крейтов для облегчения реализации своих GC, потому что пока что мне ручное управление памятью в расте видится несколько громоздким.
> Хотя мутабельность ты с хачкелем не подружишь
Поэтому у меня модификация (хотя и оригинальная система типов вполне позволяет, но мне она вся не нужна)
>>834997
Что ж тебе так покоя не дает, что я себе там на своем личном гит сервере делаю-то? Ну пилю я себе PhD, ну отъебись.
> Или ты слишком туп
А может, ты?
> Ну вот нахуя ты делаешь очередной никому не нужный ЯП
Может, потому, что есть такая задача? Пытаюсь сделать ЯП, в котором конкуррентность проверяется на уровне типов.
Хотя нахуя я вообще тебе это поясняю, ты наверняка даже разницу между STLC и System F не знаешь.
>Меня больше интересовало, нет ли крейтов для облегчения реализации своих GC
Так ты результаты поиска по lib.rs посмотрел? Я там вроде бы видел что-то такое.
В lib.rs я поискал, я просто нашел код одного кодера, делавшего на расте клон beam vm, у него сделано ровно так, как мне нужно.
Просто структура с usize внутри, а дальше обертки для интерпретации этого числа как указателя на что угодно и обратно, арифметика реализована удобно, вот это все. Ну и аллокатор чанков на mmap-е сделан. Последний выглядит почти как на си, лол.
Сижу, вникаю в детали. Но за помощь все равно спасибо :) Пойду там искать битовые карты, нужно для G1 GC. Пока что bitset-core выглядит как то, что надо.
> > Или ты слишком туп
> А может, ты?
Ясно. Ты тупая хаскелесобака.
Научишься говорить на Rust - приходи. Пожуем говна, попьем мочи.
Звучит не очень, потому что usize имплементит Send и Sync, а голые указатели — нет (и не зря). Так что может выстрелить. А может и нет. Но сам там смотри, в общем.
Ну тут просто никак не обойтись без подобного, потому что мне нужно работать с указателями на объекты в куче как из потоков GC, так и из потоков шедулеров. Тут головой надо просто думать, ну куда без этого)
Кстати, практика предыдущей версии показала, что использование общей кучи позволяет не только в один актор запихнуть обработку дохрена большого массивчика, что очевидно, но и снижает траты памяти в целом по сравнению с тем же erlang, где у каждого актора сразу своя куча на пару сотен байт. Так что ради таких преимуществ придется и потерпеть :)
не байт, слов, а машинное слово, в зависимости от архитектуры, может и 8 байт быть. Вроде одно слово перепутал, а сколько смысла поменялось...
Ну, с простым IDL языком я вот буквально сейчас его использую, вроде нормально. Правда в книжке пары моментов не хватает, вроде специальных span-матчеров @L и @R, но для этого достаточно почитать немного сорцов и тестов в репе.
Ну и он LR(1), так что если у тебя язык не context-free, то decent recursive Pratt в паре с nom либой может лучше зайти.
Окей, благодарю!
Можно узнать почему ты хочешь региональный gc, а не подобие новых zgc и шенанды ?
Забыл упомянуть shenandoah и zgc, да. А разве они не на регионах, кстати?
https://www.researchgate.net/publication/306112816_Shenandoah_An_open-source_concurrent_compacting_garbage_collector_for_OpenJDK
> Shenandoah is an open-source region-based low-pause paral-lel and concurrent garbage collection (GC) algorithm
Я думал, что мы малые объекты конкурентно эвакуируем из одного региона в другой как раз. Или ты имел в виду поколения?
Прости, и правда он региональный без поколений, в голове чуть пермешалось
Зачем нужен RON (Rusty Object Notation)? Без него никак не написать сериализацию данных в русте?
Затем же, зачем жабаскриптерам надо было придумывать JSON — просто похожий и приятный синтаксис.
JSON - никто специально не придумывал оттого он такой убогий. Просто придумали как передавать данные так, чтобы в жопаскрипте одним eval можно было из строки получить объект.
>В результате никто так не делает.
Теперь-то нет - наелись всяких эксплоитов, но когда JSON только появился других вариантов не было.
В чем принципиальное отличие RON от Serde? Ведь и тот и другой нужен для сериализации данных.
>Ну пилю я себе PhD, ну отъебись
Т.е. ты возможно будущий учёный, какой нибудь доктор технических наук.
Будущее светило науки, а разговариваешь как псина из подворотни. Зачем так? Почему нельзя разговаривать по человечьи? Я понимаю, когда так базарят шлюхи из вебкама или инцелы с двача, но учёный, как по мне, должен быть выше этого.
Меня это вообще сильно расстраивает. Мне всегда наука виделась чем-то большим чем человек, чем то великим. Но с течением времени, с тех пор как количество докторов и кандидатов становится всё больше — я всё больше теряю уважение к этому ремеслу (тяжелому ремеслу, я знаю это). Я думаю 90% современных учёных просто паразиты на теле общества. Никакого уважение к ним быть не должно, с них нужно так же как с чинуш спрашивать, тыкая носом в какашки. Все эти гендер стадис, заказные статьи в научных журналах, искуственное усложнение научного материала (haqreu об этом писал). При этом вы ещё более гнусные чем какие нибудь чинуши, у чинуш есть хотя бы гордость. А у вас...Я видел инфу, где в исследовании атмосферу внутри научного коллектива разных университетов сравнивали с атмосферой царящей в коллективе какого-нибудь пригородного завода. Зависить, токсичность, злорадство, паразитизм, надменность — так учёные описывали своих собственных коллег и друзей. Просто лучшие из людей, не иначе.
И вот конкретно ты — часть всего этого мусора. При этом ещё и марасишь как токсичная дегенеративная зумерка. Фу просто, фу.
мимо
так его какой-то студент сделал
Я недавно вкатился, на мой взгляд убого выглядят только спецификаторы лайфтаймов, вот эти все <'a>
Одиночный апостроф в коде в принципе люто странно выглядит
Остальное красиво
Согласен. Не совсем очевидно что лайфтайм передается как type parameter. Я сначала ожидал бы там только тип, но никак не время жизни.
Общаюсь с, возможно, тупыми двачерами на понятном им языке, а с умными - на человеческом. Не вижу никакой проблемы. Подчеркнуто вежливое общение на анонимной имиджборде вроде двача выглядит еще тупее, поверь.
> Все эти гендер стадис
При чем тут гендер стадис, если эта хрень не только не приносит пользы, но и вообще вредна? ЭТО наукой признают только окуколдившиеся мудаки.
> искуственное усложнение научного материала
Всегда будут те, кто хочет выпендриться. К счастью, большинство известных мне компетентных ученых такой фигней не страдает.
> Я видел инфу
Ну-ка, покажи, пожалуйста, где ты видел ту инфу? Сослался - пруфани.
Еще ты требуешь от людей соответствия не профессии, а твоему внутреннему представлению об этики этой профессии, что, мягко говоря, странно. Никто не обязан следовать твоим представлениям. Вот никто и никак. Смирись. Я бы понял, если бы в другое время с меня такое требовали, но на анонимной борде, где нахуй посылают просто за то, что ты есть - ???
Про 90% паразитов практически согласен, многие не знают, зачем им PhD и делают в итоге мусорные исследования, переводят на это время и ресурсы, в том числе и интеллектуальные. Тоже вредительство. С другой стороны, если мы позволим кому-то определять полезность исследования, то окажемся заложниками представления этого "надзирателя" о пользе. В каком-то смысле это происходит через индекс Хирша.
Кстати, открою тебе такой секрет: иногда матом можно довольно коротко и ясно донести до человека то, что "нормальным" языком доносилось бы сильно подольше. Банально потому, что мозг не тратит ресурсы на парсинг всей этой мишуры и сразу работает над идеей. Согласись, фраза "хуйни калмана" звучит короче и понятнее, чем "пропусти это через фильтр Калмана". Во второй фразе слов больше при том же смысле.
. 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.
https://twitter.com/nadavrot/status/1319003839018614784
На собеседовании все равно будешь крутить деревья и вертеть массивы на доске или в блокноте, ну и литкод хард дадут за 5 минут решить
Дык нахуй фейсбук. Главное что они будут конпелятор допиливать.
720x720, 1:16
> Кстати, открою тебе такой секрет
Экспрессивное использование языка не то же самое, что брань или ругань.
>Ну-ка, покажи, пожалуйста, где ты видел ту инфу? Сослался - пруфани.
Ну, например, вот:
https://www.semanticscholar.org/paper/Destructive-conflict-and-bullying-at-work-Hoel-Cooper/ https://link.springer.com/article/10.1007/s10672-012-9193-7
https://www.tandfonline.com/doi/abs/10.2753/ATP1084-1806320103
По схожим запросам можно найти ещё.
>Подчеркнуто вежливое общение на анонимной имиджборде вроде двача выглядит еще тупее, поверь
Что значит "поверь"? Я вообще-то тоже тут сижу. Даже на анонимной борде вежливое общение вызывает уважение. Когда два анона спорят и один скатывается к "ха, я тваю мамку ебал" — без судей понятно кто победил в дискуссии.
> С другой стороны, если мы позволим кому-то определять полезность исследования
Нам не нужно определять "полезность" исследований. Я ни слова не сказал про "полезность". Достаточно просто не врать, не фальсифицировать статьи, не подгонять статистику под свои манямиры и конъюнктуру. Сейчас же - от десятой до трети всех исследований (по разным оценкам) - фейк. Причём среди разных наук, в том числе и точных.
Я уже молчу про то, что многие из них просто не читаются, не перепроверяются и потенциальные ошибки в них не ищут. Вот, наугад:
https://onlinelibrary.wiley.com/doi/abs/10.1111/ecoj.12461 https://www.semanticscholar.org/paper/Publication-Bias:-The-"File-Drawer"-Problem-in-Scargle/ad265c494be00224f1d10a14684b2dce331efc01 https://science.sciencemag.org/content/342/6154/60.full https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2586872/
А бесконечные россиянские кандидатские и докторские? Их кто нибудь читает, вычитывает?
>При чем тут гендер стадис, если эта хрень не только не приносит пользы, но и вообще вредна?
Здорово...
>Никто не обязан следовать твоим представлениям. Вот никто и никак. Смирись.
...А потом ты начинаешь разговаривать как обычная феминистка. "Моё тело — моё дело! Я ничем и никому не обязана!".
Тот факт, что ты считаешь, что никто не может призывать тебя к соблюдению принятой в обществе этики твой профессии — говорит о том, что ОНИ побеждают. Но наше общество ещё не настолько деграднуло. Поэтому когда дело касается врача или полицейского — всё общество в единой порыве требует от них соблюдения этических правил. Врачей даже заставляют принимать полурелигиозную клятву врача (на основе клятвы Гиппократа, которой бог знает сколько лет). Потому что никому не хочется, находясь при смерти, слышать хамство, грубость и "отъебись".
Но чем дальше от тела, чем меньше мы чувствуем связь, чем меньше мы чувствуем значимость и влияния друг на друга — тем больше эти границы размываются. Тут и вылезают левые постмодернисты...Которые никому и ничего не должны, которые не собираются соответствовать твоим ожиданиям и представлениям, которые начхать хотели на твоё мнение и твои взгляды. Заметь как эта идея стремительно растёт в обществе. И чем больше человек развращён — тем больше он "никому и ничего не должен". От фемок и sjw до политиканов и мажоров. Эта идея пожирает людей. И именно поэтому "вредных" гендер стадис — будет становится больше, врач в больнице будет смотреть на тебя как на говно, а коп дубасить палкой. Смирись.
720x720, 1:16
> Кстати, открою тебе такой секрет
Экспрессивное использование языка не то же самое, что брань или ругань.
>Ну-ка, покажи, пожалуйста, где ты видел ту инфу? Сослался - пруфани.
Ну, например, вот:
https://www.semanticscholar.org/paper/Destructive-conflict-and-bullying-at-work-Hoel-Cooper/ https://link.springer.com/article/10.1007/s10672-012-9193-7
https://www.tandfonline.com/doi/abs/10.2753/ATP1084-1806320103
По схожим запросам можно найти ещё.
>Подчеркнуто вежливое общение на анонимной имиджборде вроде двача выглядит еще тупее, поверь
Что значит "поверь"? Я вообще-то тоже тут сижу. Даже на анонимной борде вежливое общение вызывает уважение. Когда два анона спорят и один скатывается к "ха, я тваю мамку ебал" — без судей понятно кто победил в дискуссии.
> С другой стороны, если мы позволим кому-то определять полезность исследования
Нам не нужно определять "полезность" исследований. Я ни слова не сказал про "полезность". Достаточно просто не врать, не фальсифицировать статьи, не подгонять статистику под свои манямиры и конъюнктуру. Сейчас же - от десятой до трети всех исследований (по разным оценкам) - фейк. Причём среди разных наук, в том числе и точных.
Я уже молчу про то, что многие из них просто не читаются, не перепроверяются и потенциальные ошибки в них не ищут. Вот, наугад:
https://onlinelibrary.wiley.com/doi/abs/10.1111/ecoj.12461 https://www.semanticscholar.org/paper/Publication-Bias:-The-"File-Drawer"-Problem-in-Scargle/ad265c494be00224f1d10a14684b2dce331efc01 https://science.sciencemag.org/content/342/6154/60.full https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2586872/
А бесконечные россиянские кандидатские и докторские? Их кто нибудь читает, вычитывает?
>При чем тут гендер стадис, если эта хрень не только не приносит пользы, но и вообще вредна?
Здорово...
>Никто не обязан следовать твоим представлениям. Вот никто и никак. Смирись.
...А потом ты начинаешь разговаривать как обычная феминистка. "Моё тело — моё дело! Я ничем и никому не обязана!".
Тот факт, что ты считаешь, что никто не может призывать тебя к соблюдению принятой в обществе этики твой профессии — говорит о том, что ОНИ побеждают. Но наше общество ещё не настолько деграднуло. Поэтому когда дело касается врача или полицейского — всё общество в единой порыве требует от них соблюдения этических правил. Врачей даже заставляют принимать полурелигиозную клятву врача (на основе клятвы Гиппократа, которой бог знает сколько лет). Потому что никому не хочется, находясь при смерти, слышать хамство, грубость и "отъебись".
Но чем дальше от тела, чем меньше мы чувствуем связь, чем меньше мы чувствуем значимость и влияния друг на друга — тем больше эти границы размываются. Тут и вылезают левые постмодернисты...Которые никому и ничего не должны, которые не собираются соответствовать твоим ожиданиям и представлениям, которые начхать хотели на твоё мнение и твои взгляды. Заметь как эта идея стремительно растёт в обществе. И чем больше человек развращён — тем больше он "никому и ничего не должен". От фемок и sjw до политиканов и мажоров. Эта идея пожирает людей. И именно поэтому "вредных" гендер стадис — будет становится больше, врач в больнице будет смотреть на тебя как на говно, а коп дубасить палкой. Смирись.
Да просто интеллигенция местная наехала на быдлоPhD из мухосранского рогатника. Лучше бы Rust обсуждали.
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
https://careers.microsoft.com/us/en/job/917051/Senior-Software-Engineer
Ну, что я быдло я и не отрицаю но позволить себе подобное могу только на анонимной борде, да, но уж больно странная аргументация у анона, нет, ну правда. Мне кинули ответку про говно, я попросил отъебаться, а тут этот анон решил, что докопаться нужно именно до меня. Ну не дает ему покоя, что я на анонимной борде позволяю себе послать человека, который в забавной форме послал меня. Ну окей. Удачи в этом, все дела.
А что раст нужно здесь обсуждать - это да, поэтому больше сюда по оффтопу отписывать не буду, да и анону выше не советую.
Собственно, у меня и вопрос: битовые поля как в си в расте чем лучше имитировать? Очень надо.
Слился, значит? Ну твоё право, конечно. Тебе с этим жить.
> WHY CAN'T I DO THISW IN RUST?!!
> voidx
Ой а что имеется в виду? Неопределенных типов типа auto какого нибудь
Если что мимопрограммист на с/с++/js имевший некоторый опыт со swift в котором вроде как есть тип Any что как бы заменяет voidx
>Неопределенных типов типа auto какого нибудь
Это называется вывод типов, всё там определено.
>на с/с++/js
Судя по вопросу, опыт у тебя есть только с жс.
>опыт со swift в котором вроде как есть тип Any что как бы заменяет voidx
Никак не заменяет, Any — это обёрточный тип хранящий метаинфу о том, что в нём лежит (и несущий соответственные накладные расходы), а void* — это тупо сырой указатель (просто адрес на начало куска памяти), аналогом которого является OpaquePointer в свифте и std::ffi::c_void в расте.
> просто адрес на начало куска памяти
Уважаемый господин программист, давай не будем языковую семантику приплетать к работе железа, в каком нибудь эльбрусе например указатели представлены отдельным типом от данных, и передавая 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(), и оверхэд там связан только с рантайм библиотекой которая контролирует это дело, а не какими не метатипами. Нахрена тогда вообще язык типизированный, в том же джаваскрипте джит компилятор во время исполнения по входным аргументам определяет для каких типов функции / инструкции подставлять, но на то он и динамический язык.
> просто адрес на начало куска памяти
Уважаемый господин программист, давай не будем языковую семантику приплетать к работе железа, в каком нибудь эльбрусе например указатели представлены отдельным типом от данных, и передавая 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(), и оверхэд там связан только с рантайм библиотекой которая контролирует это дело, а не какими не метатипами. Нахрена тогда вообще язык типизированный, в том же джаваскрипте джит компилятор во время исполнения по входным аргументам определяет для каких типов функции / инструкции подставлять, но на то он и динамический язык.
>в каком нибудь эльбрусе например указатели представлены отдельным типом от данных
Мне лень лезть и смотреть чего там придумали, хоть я и рад за прогрессивных разработчиков эльбруса, но когда его будут использовать, тогда и приходите.
>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мя картинками и текстом.
> в том же джаваскрипте джит компилятор во время исполнения
А нахуя тратить ресурсы во время исполнения если можно сделать это на этапе компиляции? Да и покрывать тестами каждый пук не надо, лол.
>в каком нибудь эльбрусе например указатели представлены отдельным типом от данных
Мне лень лезть и смотреть чего там придумали, хоть я и рад за прогрессивных разработчиков эльбруса, но когда его будут использовать, тогда и приходите.
>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мя картинками и текстом.
> в том же джаваскрипте джит компилятор во время исполнения
А нахуя тратить ресурсы во время исполнения если можно сделать это на этапе компиляции? Да и покрывать тестами каждый пук не надо, лол.
Хуя подрыв
> Система типов на то и нужна, чтобы существовать в компайл тайме
> Чтобы юзать типы и писать код, который не будет жрать все ресурсы
а voidx это какой тип, не подскажешь?
> А нахуя тратить ресурсы во время исполнения если можно сделать это на этапе компиляции?
Что бы по максимуму использовать аппаратные возможности конкретного процессора на котором код запускают, это как один из вариантов, так же портабельность и типо-безопасность в рантайме, а не только на этапе компиляции
>T size: 4
>Any size: 32
Там в ассемблере эти числа литералами забиты, что как раз и показывает что компилятор в компаилтайме опираясь на известные типы все это посчитал, чего с указателем в принципе нельзя сделать. Но это хуйня так как указатель на реальный объект там все равно есть но так же там есть информация например для сравнения типов чего в сыром указателе нет, зато есть в типичных сишных структурах в которых тыкают поля для указателя на функцию, указателя на другую структуру или указатели на кучу. Так что к чему твой перфоманс с кодом я не понял, зато понял что ты лицемерное пиздло серящее на веб при этом используя его ресурсы для компиляции и вывода результата, а не свой локальный компьютер.
Программирование на GPU исторически выполнялось с помощью HLSL или GLSL, простых языков программирования, которые развивались вместе с API рендеринга на протяжении многих лет. Однако по мере развития игровых движков эти языки не смогли предоставить механизмы для работы с большими кодовыми базами и, как правило, отставали от кривой по сравнению с другими языками программирования.
В этом проекте мы надеемся, что мы продвинем отрасль вперед, добавив в GPU Rust, существующий низкоуровневый, безопасный и высокопроизводительный язык. И вместе с этим появляются некоторые дополнительные преимущества: система пакетов / модулей, которая является одной из лучших в отрасли, построенная с защитой от условий гонки или доступа к памяти за пределами границ, широкий спектр библиотек и инструментов для улучшения рабочих процессов программистов и многое другое. !
https://github.com/EmbarkStudios/rust-gpu/releases/tag/v0.1
C++, СОСАТЬ!
Rust действительно для для особенных людей.
Авторша сабжа @khyperia:
> одна из многих причин, по которым я присоединился к @EmbarkStudios было то, что я устал от того, что почти никогда не работал с меньшинствами или даже с людьми, которые были похожи на меня ... и теперь есть абсолютная группа трансгендеров, работающих со мной над rust-gpu, и это потрясающе
Хипстеры-педики не способны написать ничего толкового.
Толи дело раньше, пара боевых пидарасов написала целый sendmail
Парни, всем ку. У кого-то осталось фото рабочего стола который постили в треде, или в шапку расто тредов. Там такое ламповое рабочее место, мышка логитеч вертикальная и повернутый монитор. Мб у кого осталось?
а, тут последний пост 3 дня назад. Жаль
Можно в архивах попробовать поискать, но там не всегда грузятся картинки.
Откуда они, сука, все повылазили, пидорасы...
tokio, reqwest, serde, хуйня-малафья.
Дак вот. Пик1 (с записью в файло) - работает, пик2 (запись закомменчена) - нет.
То есть, оно, сука, асинхронно кормит строку serde, и не успевает раньше, чем serde обнаруживает недостачу поля.
Так убери async из определения функции блять, или используй комплитеры какие нибудь внутри функции.
Получается не такая уж и хуйня serde? Помогла тебе поймать баг?
let baz = foo?.bar // - если foo будет null, то цепочка чтений на ней и закончится без исключений а baz == null и его дальше надо тоже ставить с проверкой fn1( bar: baz? ) например
let baz = foo!.bar // - если foo будет null, то выполнение в этом месте остановится
так?
https://doc.rust-lang.org/edition-guide/rust-2018/error-handling-and-panics/the-question-mark-operator-for-easier-error-handling.html
Нет, ты со свифтом попутал. foo?.bar просто закончит программу ошибкой.
Не закончит программу, а вернёт ошибку из функции. Это охуительно разные вещи. Вот `unwrap` закончит программу с паникой.
Точнее, развернёт стэк до старта треда или до первого `catch_unwind`, но для мейн треда без `catch_unwind` это закончит программу.
чтобы прямые зависимости моей приложухи собирались как динамические so-шки? Ну типа, чтобы в release/ валялись отдельно my-app и отдельно hyper.so, serde.so и т.д ?
не поверите, но настолько хуёвый инторнет
Очень сложно и где-то рядом там ходит UB. Проще заставить конечных юзеров скачать раст и собрать у них на компе.
Конечный юзер, это слабенькая виртуалка где-то в дойчлянде, сборку она не потянет. У меня рядом какая-то стройка, из-за неё, видимо, оборудование оператора эпизодически подташнивает и оно теряет пакеты - закачать через scp цельный кусок на 7Mb становится проблемой. Уже подумываю поднять ftp сервер с докачкой или разбивать файл на куски архиватором.
Уточню, что под переменными которые она использует, я имею ввиду родительское окружение а не аргументы.
Полноценное замыкание не выделяет память и не копирует туда значения переменных? Папрашу вас
Ссылки на стек, который поп и всё?
Что значит полноценное? https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=522be7edde68a85b72441afc8c7b60b2
В данном случае замыкание не полноценное?
>>845150
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b0eb34288b37dcf02824a0cb5a965a23
Вот в данном примере. Если s1 у нас ссылка, то почему код требует явного референса над s1?
Я наверное где-то проебался. Рассудите и укажите где.
Я немного напутал в первой ссылке. Печатать нужно не кучу а стек.
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=3aedfdaf959d601132ac13c8147ec296
Так или иначе. Это та же s1 что и в родительском скоупе. Она не является ссылкой, и передачи владения не было. Это видно по совпадающим адресам.
Если кому-то интересно, мало ли. Раст и правда хранит внутри структуры замыкания ссылку на переменную из родительского скоупа. Вопрос мой был в том, почему внутри скоупа она доступна как объект а не как ссылка на объект. Оказалось, что раст автоматически дереференсит ее для меня. Формально приводя к тому типу объекта которым она является.
обе эти ссылки указывают на переменную с1, то есть на стек, в чем вопрос я так и не понял
>escaping closures
Какая-то swift-only костыльная хуйня, нужная для поддержания плохо сшитых by-design штанов. Ты бы ещё аналог оператора GOTO попросил.
Если я правильно понял суть, то создаешь лямбду через move ||. Переменные захватываются по значению и их можно гонять туда-сюда.
Нет, не понял. В расте этой хуйни просто нет, потому что лайфтаймы анализируются в компайлтайме и оно тут не нужно.
Оно есть (и нужно) только в свифте (с подсчётом ссылок в рантайме), это такой недокостыль на уровне системы типов, чтобы заставить нюфагов поменьше плодить утечки памяти и не вставлять в язык ещё и гц для таких кеков.
Даст, но только на стек одной из предыдущих функций, на стек текущей функции не даст, да, потому что стек текущей функции зачищается на выходе из функции.
Ой все.
fn foo(x: &i32) -> &i32 { x }
fn main() {
let a = 5;
let b = foo(&a);
}
Здесь в `b` лежит ссылка на стековый объект, но вернулась ссылка из функции ниже по стеку. По очевидным причинам, чтобы вернуть ссылку на объект выше по стеку, надо уже иметь ссылку на этот объект, на структуру с этим объектом внутри, коллекцию со ссылками или ссылку на коллекцию.
Нет речь шла об функции возвращающей замыкание хранящего ссылку на объект на стеке
примерно так:
|| {let a: &mut i32 = s; s+=1;}
Я весной 2019 пробовал, но я тогда только вкатывался, меня на собесе завернули. Там же на собесе я узнал, что у них работа по Utc, что с моим +8 было бы проблематично - ну и не стал больше к ним соваться. Интересно, они бесконечно расширяются, у них текучка, или не нашли ещё тот бриллиант?
Когда в команде есть хотя бы 6-7 человек — там скорее всего уже будет текучка с текущими условиями рынка, когда можно получать x1,5-2 к своей текущей з/п каждый год, если ты не отбитый даун из треда вкатышей.
Алсо, могут как не испытывать нужды в кандидате (и просто собеседовать на похуй для отчетности), так и иметь кучу бабла и хотеть ускорить процесс разработки. А ещё могут просто базу собирать чтобы потом её продавать и спамить тем кто в неё попал.
Ну, ёпт. Это всё гадания, но неужели никто, кроме меня, не сталкивался? Их вакансия по расту с удалёнкой стабильно висит уже второй год, других-то и нет почти.
Пидарки-хрюши отрабатывают команду директора "мы никого не ищем, нам никто не нужен, но если увижу что вы без дела сидите-хуй сосать немытый заставлю".
В итоге сосёшь ты хуй эйчарок.
Делали офер, но потом рассказали про анальные условия работы:
Скриншотишь свой экран раз в 30 секунд и в конце рабочего дня отправляешь им архив. Отсутствие на рабочем месте -- штрафы в геом прогрессии. Очевидно такая вакансия будет хоть 10 лет висеть.
В релиз не собирал, но неужели такая разница? Простой текст эта шняга отдавала под 40 rps в дебаг-режиме, я уже собирался кончить радугой - и такой облом
Разница ебическая обычно, особенно во всем что связано с графикой.
Охуеть, выдало 285 rps. Спасибо, растаны, возвращаете мне веру в человечество!
Решил в pr глянуть. Полтреда срачи на тему вим классный/вим хуита для нитаких, из раста уходят разрабы и языку пизда. И как-то вообще желание пропало учить его.
Ну и не учи, в чем проблемы-то?
>И как-то вообще желание пропало учить его.
У меня постояно такое
Начинал плюсы, начали появляться навязчивые мысли что он мертворожден
Аналогично с растом
мы поехавшие, сопротивляйся этому
Послушай лекции Кладова, он параллельно объясняет почему Раст такой охуенный и нужный
Да, вот есть такое ощущение, что через год раст ТОЧНО ВСЁ!
Да вряд ли он умрет, если только вдруг новые мейнтейнеры не загнут его. Ну вот, опять началось
После мозиловских увольнений даже серво кто-то себе под крыло взял. Раст уж точно найдёт куда примкнуть.
Можно свой фонд организовать, как у пистона
>В Хачкеле асинхронность типа совсем прозрачная, т.к. всё ранится в IO и отдельная async-монадка не нужна
>async-монадка через async/await
>Насколько это монадка и насколько хорошо она играет с растовскими правилами владения
Для начала тебе нужно понять что такое монада
Эксперимент, видимо, закончен.
Самое забавное, тонну времени назад, тут бегали шизики, которые говорили что на таких началах раст захлебнется. Только тогда говорили что проблема не в сжв, а хипстерах.
>генерящий png 1000x1000. Выдало где-то 17 rps, думаю - фу, говно.
Изучил я значит этот вопрос, возможно на пыхе хуйово оптимизирован пнг енкодер. Нужно было попробовать отключить компрессию. Сделал то же самое на пщ, с включенной компрессией 1000х1000 - выдало 15 rps. Если её выключить выходит 170-200 на разных машинах. А если ещё и использовать более оптимизированные алгоритмы то станет ещё лучше.
А на расте-то с компрессией или нет?
Алсоу, ты уж засеки вчистую, сколько микросекунд занимает собственно генерация одной картинки в один поток.
Да хуй знает что там в расте, я просто мимо проходил. Чтобы сгенерить одну пнг вышло 3.693 [ms] (mean). Кстати нашел ещё один bottleneck, попробуй в пыхе оптимизировать рандомную генерацию байтов. В моем случае го это ускорило с 32.301 [ms] до 3.543 [ms] (per request).
> Amazon: We're hiring software engineers who know programming language Rust
https://www.zdnet.com/article/amazon-were-hiring-software-engineers-who-know-programming-language-rust/
почему при определении диапазонов (например, 1..10) левое значение берется какое есть, а правое - меньше на единицу. Почему решили так, а не сразу вписывать нужные границы, что было бы очевиднее простым смертным
Попробуй 1..=10
По поводу почему, например потому что индексы с нуля начинаются и 0..10 — это десять элементов, а не 11, как бы было с твоей хотелкой.
спасибо, думал там есть может какое-то обоснование почему именно так сделано
Чето тоже хотел про ренжи написать
Одна (<) операция банально проще (<=)
(..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,
};
Ок, про парсинг это очевидно, читаем и возвращаем ошибку или успех. Но что-то до меня не доходит, почему в случае некорректного ввода чтение строки продолжается? Как мы это сообщили? Ведь с матче ничего про это не сказано.
Да я просто еблан. Не привычно видеть такой запись циклов, вот и не обращал внимания и разобрать пытался
Для меня эта запись этой задачи выглядит как максимально лаконичная из всех возможных, лол
На каких языках ты до этого писал?
perl и python использую сейчас, delphi когда то давно
Ну С ффишить можно без std
Делать копию не хочу, потому что медленно и отнимает гигабайты памяти.
Уродливый синтаксис, отсутствие инфраструктуры, высокий порог вхождения, не то что кресты.
Если тебе не нужен ресайз, то зачем тут вектор? Если нельзя через слайс, то лучше вектор преаллоцировать из Раста, а потом в эту память писать из плюсов.
> Непонятно почему раст так мало популярен у сишников, яп намного комфортнее динозавра С++.
1) популярность растет, но медленно
2) большая стандартная либа, не везде удобно пихать, даже у плюсов в два раза меньше, не говоря про чистую сишечку
3) пока что ебатня с кроссплатформой: если для C/C++ можно просто без задней мысли кинуть код в android studio и скомпилировать (может с какими-то правками по c++stl для особых случаев), то в расте пока что не так комфортно писать кроссплатформу (даже с использованием rust-sdl)
Сырость библиотек и инфраструктуры. Стандартная либа работает не везде, альтернативы нет
Идеологические различия - сишка это просто, сишка это прозрачно - с помощью присталього взгляда можно понять во что кусок кода конпелируется
Звучит как ёбаный ад, но если вектор правда не будет дропаться, то, наверное, заработает. Можешь попробовать переопределить в Расте глобальный аллокатор чтобы пробрасывать плюсовые функции.
Чё-та я сомневаюсь, что жирные бинари по неск Мб даже после всех стрипов, panic = "abort" и прочего содержат действительно всё только нужное.
Возможно я неправ, не шарю в тонкостях линковки
Ну, если ты это делаешь вручную, то да. А если конпелятор уже знает, что в этой сошке по вот этому адресу лежит такая-то safe функция, то какая разница?
Я даже думаю, что со временем такую возможность запилят.
А файлы-то как раз небольшие. Хеллоуворлд на Сях со статической линковкой (gcc -s -static -Os hello.c -o hello, gcc 9.3.0 под ubuntu 20.04) уже дополз до 800 килобайт. А ведь мои седые яйки помнят смазливых дельфистов, которых можно было невозбранно унизить за их систему виджетов, занимавшую аж целых 400КБ.
Можно засунуть в переменную окружения RUSTFLAGS "-C prefer-dynamic"
Программа может еще много весить из-за дженериков и прочего пиздеца, я бы на твоем месте сначала посмотрел на дженерики в коде и либах.
> Идеологические различия - сишка это просто, сишка это прозрачно - с помощью присталього взгляда можно понять во что кусок кода конпелируется
Конечно можно, вот открываю исходный код линукса/ллвм/гцц и любуюсь на макросы, все сразу понятно и ясно, не то, что ваш убоший раст!
> не то что кресты.
ВЫУЧИЛ С++
@
УХ НАКОНЕЦ НАЙДУ РАБОТУ
@
НИКУДА НЕ БЕРУТ
@
ОПЫТ РАБОТЫ 3+ ЛЕТ
@
СТАЖЕР ПОЛУЧАЕТ МЕНЬШЕ СТАЖЕРА-ПИТОНИСТА
@
НУ ЛАДНО, ПОЙДУ ХОТЯ БЫ ТУДА
@
ПЕРВАЯ СЕРЬЕЗНАЯ АРХИТЕКТУРА ПО
@
СПУСТЯ ДОЛГИЕ НОЧИ МУЧЕНИЙ НАКОНЕЦ-ТО СПРОЕКТИРОВАЛ И НАКОДИЛ
@
w: СЕГФОЛТ
@
ОКАЗАЛОСЬ, ЧТО АРХИТЕКТУРА НЕ БЕЗОПАСНАЯ
@
ПЕРЕПИСЫВАЕШЬ
@
go w
@
...
@
ПЕРЕПИСАЛ, СДАЛ
@
ДОВОЛЬНО ПОЛУЧИЛ СВОИ ХЛЕБ И СОЛЬ
@
ВСЕ ЕЩЕ СЧИТАЕШЬ, ЧТО С++ ПРОЩЕ РАСТА
> не то что кресты.
ВЫУЧИЛ С++
@
УХ НАКОНЕЦ НАЙДУ РАБОТУ
@
НИКУДА НЕ БЕРУТ
@
ОПЫТ РАБОТЫ 3+ ЛЕТ
@
СТАЖЕР ПОЛУЧАЕТ МЕНЬШЕ СТАЖЕРА-ПИТОНИСТА
@
НУ ЛАДНО, ПОЙДУ ХОТЯ БЫ ТУДА
@
ПЕРВАЯ СЕРЬЕЗНАЯ АРХИТЕКТУРА ПО
@
СПУСТЯ ДОЛГИЕ НОЧИ МУЧЕНИЙ НАКОНЕЦ-ТО СПРОЕКТИРОВАЛ И НАКОДИЛ
@
w: СЕГФОЛТ
@
ОКАЗАЛОСЬ, ЧТО АРХИТЕКТУРА НЕ БЕЗОПАСНАЯ
@
ПЕРЕПИСЫВАЕШЬ
@
go w
@
...
@
ПЕРЕПИСАЛ, СДАЛ
@
ДОВОЛЬНО ПОЛУЧИЛ СВОИ ХЛЕБ И СОЛЬ
@
ВСЕ ЕЩЕ СЧИТАЕШЬ, ЧТО С++ ПРОЩЕ РАСТА
>из-за дженериков
По-твоему раст собирает все возможные варианты функций для всех возможных типов, удовлетворяющих дженерику? Ты чего-то не того поел.
Дык, либа, работающая с неизвестными на этапе сборки типами, это что-то из мира жабы и питона.
Вот действительно - в крестах можно засунуть в хедер файл библиотеки тело шаблонной функции, что-бы она компилировалась вместе с программой. Можно ли так в расте? Вроде там есть для этого тип сборки
линукс пишут пидарасы, и главного зовут лёня у их там.
у меня на винде 150кб
Сейчас смотрю достижения C++20 и вижу там корутины, концепты и compile-time функции, всё уже готовое к продакшну.
Раст же только 2 года назад стабилизировал ебаные интринсики под x86, а вот aarch64 не юзабелен даже в nightly блеать, и его даже в планах нет.
Нахуа нужен язык, который даже в далеком будущем будет сомнителен со своими злоебучими лайфтаймами, и при этом не особо-то в это светлое завтра торопится? У меня, блять, ощущение, что у пидаров из Мазилы вся надежда на то, что придёт какой-то купившийся на их пропаганду долбоёб и сделает за них всю работу.
И что толку от языка, который по скорости разработки вровень к говну мамонта++, и уже годы при этом не может его толком заменить? Помню, предыдущая попытка заменить Кресты была в виде Dlang - тот тоже 10 лет топтался на месте прежде чем на него все забили. Может быть, он был нам предупреждением?
У меня еще много лет назад было сомнение, что перекладывать на программиста "сборку мусора" в виде лафйтаймов не лучшая идея. У меня было предположение, что сложность будет расти со сложностью программы, но доказать я этого не мог и не хотел.
Так что получилось, кто снял розовые очки, скажите, как раст пригоден в разработке крупного ПО?
> как раст пригоден в разработке крупного ПО?
По-моему, крупного ПО (500KLOC+) на нём как не было, так и нет, так что всё чисто гипотетически. Точно могу сказать, что:
Реализация модулей у него лучшая, что я видел. Они настолько просты в обращении, что нормальный подход - начинать писать софт сразу выделяя подсистемы в модули, пока между ними не образовались паразитные зависимости. А когда модуль отправится в репозиторий, его очень легко будет версионировать, просто сделав нэймспейс v2 основным и в v1 вытащив неизменные части реэкспортом имён.
Инструменты, хотя бы для малых и средних проектов, просто приличные, но они идут вместе с компилятором, и образуют монокультуру, в которой cargo build соберет тебе почти всё что угодно.
Вместе это дает хороший задел на повторное использование кода, в противовес тому убожеству, что мы сейчас имеем в C++ и Go.
Но вот сам язык это пиздец - в нём нет lts релиза, в нём что-то постоянно ковыряют по мелочи, а важные фичи годами не вылезают из nightly. Положиться на него вообще нельзя - со временем неизбежно понадобится какая-нибудь nightly фича, и придется искать альтернативу среди библиотек, и трястись, чтобы с неё можно было перелезть на стандарт когда поспеет.
Как мне кажется, был бы язык с меньшими амбициями - что-нибудь уровня Go с вменяемыми дизайн-решениями - он бы сейчас Ноде трубу шатал. Ну а сейчас это все равно что дом без крыши, куда его такой?
Ещё насчет сборки мусора.
На днях прошла новость, что в Nim сделали опциональную лычку на счетчик ссылок, позволяющую поклясться компилятору страшной клятвой, что вот этот вот объект не будет частью цикла и GC для него запускать не надо.
На бешеном многопотоке всё, конечно будет люто неэффективно (это можно несколько сгладить софтовыми транзакциями), но для 99% софта это означает почти полную безопасность (за исключением возможных утечек памяти) при потере производительности, эквивалентной одному-двум поколениям процессоров. И никакого 3x потребления памяти или бешеного stop-the-world. Кмк, вполне нормальный компромисс.
https://twitter.com/DmitryNStepanov/status/1328797761874046977
https://rg3d.rs/
>было невозбранно унизить за их систему виджетов, занимавшую аж целых 400КБ
Во времена шиндовс 9х, 7 делфи и 16-32 метров рамы это действительно было актуально.
на бешенном многопотоке кроме как shared nothing в принципе ничего толкового не работает и все эти парадигмы мультитредингового программирования именно про "ООП-рыбку съесть и на бутылку не сесть".
Хотя ООП-рыбку есть не нужно а нужно конкретно и долго продумывать архитектуру и бизнес-логику что бы было shared nothing.
Но поскольку долго и вдумчиво зашквар, а рыночек так порешал что нужно быстро быстро и хуяквпродакшн, то имеем что имеем.
Шиндовс 95 был уникальной системой: на среднем писюке своего времени с 4МБ оперативки он работал прямо из свопа (после загрузки оставалось как раз те самые 400КБ). Смешной факт: штатно в этой системе нечем измерить объем свободной памяти. Потому что МС знают, что если бы было чем, то их бы ждали УНИЖЕНИЯ. А Дельфы 7 вышли в 2002, тогда меньше 32МБ уже было редкостью, всё больше 64-128. Короче, технических причин ненавидеть большие бинарники не было, просто мы тогда были злобными песдюками :)
Благодарю
пруфы схоронил?
Сидит мужик дома утром с бадуна, башка болит, денег нет. У жены просить бесполезно... Вдруг обращается к жене и говорит: — Маша, а ты читала вчера в газете о новой клинике? — Какой еще клинике? — А тут открыли новую клинику: переделывают члены на любой вкус. Всего 50 рублей стоит... — Да что ты говоришь?! На вот 50 рублей, иди и сделай себе подлинее. Мужик довольный, оделся, выходит, в дверях его останавливает жена и даетеще 50: — И попроси, чтоб еще потолще сделали. Мужик вышел, прошел с десяток метров, жена кричит с балкона: — Стой! Вот тебе еще полтинник, пусть сделают, чтоб еще изогнутый был, как в том немецком кино... Ну, приходит вечером мужик домой, бухой. Не успел порог переступить, а жена уже на него: — Ну что?! — Ох, Маша, не поверишь — такого красавца сделали: дли-и-инный, то-о-олстый... Начали гнуть — сломался! anekdotov.net
Жесть, возвращение без точки запятой, это же лютый треш и возможность wtf-ошибки по типу "==".
Я уже не говорю о возможности пересоздать переменную с тем же именем, опять же, банально на человеческом факторе и усталости можно словить лютую жопу, как в каком-нибудь динамическом языке.
>Жесть, возвращение без точки запятой, это же лютый треш и возможность wtf-ошибки по типу "==".
wat?
>Я уже не говорю о возможности пересоздать переменную с тем же именем
чиво блять?
Некоторые языки пиарятся что победили косяк "==" с человеческим фактором. А язык, который позиционирует безопасность, привносит сразу два а может и больше аналогичных костыля.
Очередная недальновидная хипстота а сейчас уже модное СЖВ гробит неплохой проект. Ведь тусовка важнее идеи.
Тупой что ли?
>>879090
>Жесть, возвращение без точки запятой, это же лютый треш и возможность wtf-ошибки по типу "==".
Wat?
>Я уже не говорю о возможности пересоздать переменную с тем же именем, опять же
Каким образом?
>банально на человеческом факторе и усталости можно словить лютую жопу, как в каком-нибудь динамическом языке
Чиво?
Столько выебонов как будто ты что то понимаешь.
>Некоторые языки пиарятся что победили косяк "==" с человеческим фактором.
Какой блять еще косяк "=="?
>остальное ко-ко-ко
Иди лучше уроки учи, завтра в школу.
>>879090
>>879016
>>879149
>Как в расте создать массив в функции и вернуть его?
>А вектор как вернуть?
>Жесть, возвращение без точки запятой, это же лютый треш и возможность wtf-ошибки по типу "==".
>Я уже не говорю о возможности пересоздать переменную с тем же именем, опять же, банально на человеческом факторе и усталости можно словить лютую жопу, как в каком-нибудь динамическом языке.
>Некоторые языки пиарятся что победили косяк "==" с человеческим фактором. А язык, который позиционирует безопасность, привносит сразу два а может и больше аналогичных костыля.
>Очередная недальновидная хипстота а сейчас уже модное СЖВ гробит неплохой проект. Ведь тусовка важнее идеи.
LOL, школьник не знающий как возвращать значение рассуждает о дизайне языка.
>Жесть, возвращение без точки запятой, это же лютый треш и возможность wtf-ошибки по типу "==".
Только в последней строчке блока, это случайно не сделать.
С недавних пор вона что можно:
https://doc.rust-lang.org/std/primitive.array.html#impl-TryFrom%3CVec%3CT%3E%3E
https://github.com/flamegraph-rs/flamegraph
Есть вот такое мнение, например. Собсно, я у себя так и ебошу clone() при каждом затруднении.
Это дорого же
Ваши аргументы?
Да, но есть сахарок чтобы можно было писать()?.ванлайнеры()?.
Ну понятно, язык в котором два типа String::from("строк"), просто потому что так системно удобнее, чем практичнее. Или язык который возложили подобие гц через лайфтаймы на плечи программиста. Нужен он для чего еще, когда есть уже языки которые дают более лучший контроль на системном уровне и где ты сам можешь решить когда собрать свой мусор?
Гц через лайфтаймы на плечах конпелятора, а не программиста - это важный нюанс. И можно от него отказаться используя обёртки для счетчиков ссылок, прописывая статические лайфтаймы или поиграть с трейтами.
Строки - сложно, и лучше уж иметь их два вида, чем проебать важные нюансы на системном уровне и получить десяток библиотек которые решают этим проблемы.
Кто даст тебе лучший контроль на системном уровне вместе с гарантиями этого контроля?
> cannot find struct, variant or union type `Number` in this scope
Положи на https://play.rust-lang.org/ так, чтобы мы видели твою ошибку.
Это копия, сохраненная 20 апреля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.