Rust #35 /rust/ # OP 3310716 В конец треда | Веб
Добро пожаловать в тред гарантий, обещаний, владения, заимствования и тайных знаков

Rust — невероятно быстрый язык для системного программирования без segfault'ов и с гарантиями потокобезопасности.

Ссылка на официальный сайт: https://www.rust-lang.org/

В этом ИТТ мы можем объяснить базовые и продвинутые концепции языка, и программирования в целом, поможем вкатывающимся, подскажем что выбрать для веба, игр или, прости Абу, блокчейна.

НОВИНКА: Rust для Windows: https://metanit.com/rust/windows/

IDE для Rust: https://areweideyet.com/
GUI для Rust: http://www.areweguiyet.com/
Web для Rust: https://www.arewewebyet.org/
GayDev для Rust: https://arewegameyet.rs/
Что еще есть для Rust?
- Посмотри сам: https://wiki.mozilla.org/Areweyet

Основная литература:
Rust Book(версия на русском языке): https://doc.rust-lang.ru/book/
Rust Book: https://doc.rust-lang.org/book/
Rustlings (упражнения чтобы привыкнуть к расту): https://github.com/rust-lang/rustlings
Rust by Example: https://doc.rust-lang.org/rust-by-example/
The Rustonomicon(для продвинутых анонов): https://doc.rust-lang.org/nomicon/
Programming Rust: https://www.oreilly.com/library/view/programming-rust/9781491927274/

Ресурсы на русском:
https://rust-lang.ru/
Отдельное спасибо автору этого гитхаба(старому ОПу). Здесь вы сможете найти много полезной информации: https://gist.github.com/TatriX/183c816f1346d418f969c4576c2b9b41

Предыдущий: >>3283990 (OP)
2 3310750
Зачем нужен невероятно быстрый язык, когда единственное для чего нужен невероятно быстрый язык С++ это работа с директикс, а для раста байндингов директикс нет?
3 3310768
>>10750
На чём писать прикладной софт с компиляцией в бинарник? На чём писать ОС, когда гну-макаки в нарушение своих же гну-лицензий выгоняют из проектов неугодных людей и подчищают код?
4 3310781
>>10768
Да хоть на питоне. Только сама по себе компиляция в бинарник ничего особо не дает, я видел проги переписанные на крестах которые работали примерно так же.
2.png12 Кб, 1282x752
5 3310783
>>10750

>директикс


Зайчем? Ты в 2к24 собрался писать игры под Хуан?
image.png58 Кб, 500x500
6 3310784
>>10768

>На чём писать прикладной софт с компиляцией в бинарник?

image.png268 Кб, 622x350
7 3310785
>>10750

>директикс

8 3310786
>>10783
Я собираюсь в опенжл, но для чего мне раст, когда для этого есть божественный LWJGL и IDEA?
9 3310790
>>10781
Нужна хоть какая-то производительность. Одно дело написать youtube-dl на нём, где 99% времени упор в IO, другое дело когда питон в 10-15 раз медленнее крестов и ты ничего не можешь с этим сделать, кроме как через костыли переписать на сишку кусок питоновского кода.
>>10784
Без сахара жить сложно, нужен сахар что привкус хуёв во рту не чувствовался.
10 3310793
>>10784
У меня негативные ассоциации с названием
6582f594b6457.jpg40 Кб, 600x419
11 3310796
>>10786

>Java


>OpenGL


>IDEA



ТРЕД ЯВЛЯЕТСЯ АНКЛАВОМ ЕВРЕЙСКОЙ АВТОНОМНОЙ ОБЛАСТИ. ГОИ ОБЯЗАНЫ ПОКИНУТЬ ТРЕД В ТЕЧЕНИЕ 12 ЧАСОВ
12 3310802
>>10790

>Без сахара жить сложно, нужен сахар что привкус хуёв во рту не чувствовался.


Что именно не хватает?
13 3310805
>>10790

>Без сахара жить сложно, нужен сахар что привкус хуёв во рту не чувствовался.


С++/C# там столько синтаксических конструкций, что просто вынимать не будешь ох эти растеры и их аналогии с членами
14 3310813
>>10793
Это у тебя извращенный ум, слово рандомное.
Уж куда лучше чем ржавчина.
15 3310818
>>10790

>питон в 10-15 раз медленнее крестов


Ну не знаю, нейросетки работают одинаково что на питоне что на с++. Ну если профайлером найти ботлнек и переписать его на ассемблере то наверно будет быстрее.
16 3310827
>>10818
У торча свой JIT. Речь про чистый код. Когда питоновского кода набирается пару десятков тысяч строк, то уже неприятно.
17 3310875
>>10784
А если выйти за пределы бета тестирования?
18 3310960
>>10875
У тебя полная совместимость с сями, тебе вообще нечего бояться. Это раст если загнется (уйдет в апач фондейшн) ты останешься с корытом, а здесь ты сможешь вернутся на си не переписывая код.
19 3310966
>>10960
Если у зига были бы евангелисты языка, то из каждого утюга бы звучало про совместимость, как например:
js -> ts
java -> kotlin
c -> zig

Но увы, это до сих пор неочевидно.
20 3310986
>>10960
Тогда нахуя оно надо, может проще сразу на сях писать
21 3311097
>>10986
А кто тебе запрещал на сях писать? Это для тех кто кому нужно могущество си, но на самих сях писать уже не хочет.
22 3311127
>>11097
Вот сделали бы для си инструмент типа cargo и нафиг ни какие зиги, расты не нужны были бы.
23 3311194
>>11127
Они что-то пытаются, вон meson высрали, но там у них голова чуть по-другому работает в отличии от нормальных людей, они не стремятся к тому чтобы сделать что-то удобнее для себя, поэтому это скорее всего верхняя планка
24 3311280
>>11127

> инструмент типа cargo


Это когда без подключения к серверам нельзя собрать ничего? Как показывает практика, завтра могут просто отключить доступ к ним из рашки, а послезавтра в коде сделать закладки для рашкинского региона, чтоб карга не работала там. И никто не будет разбираться, как в линуксе по буковкам "ру" будут нахуй посылать и иди жалуйся в спортлото.
25 3311295
>>11280
Если тебя это беспокоит и ты не озаботился vpn'ом и/или собственным/надёжным реестром пакетов/зеркалом, то ты дурачок, вон из профессии, иди в пятёрочку.
Тебя и от гитхаба могут отключить, и от sourceforge, и от debian с арчом - хоть из США, хоть из РФ (что не менее вероятно лол - вспомни как РКН ёбнул доступ к гитхабу в РФ в 2014г)
26 3311343
Язык конечно интересный, но вот что непонятно:

Зачем нужен вездесущий маркетинг и реклама?
Почему нельзя собрать проект без интернета?
Почему нельзя называть переменные "не политкорректными" названиями?
Почему async и лайфтаймы выворачивают язык наизнанку?
Почему в сообществе одни трансы и пидоры?
Почему до сих пор ничего толком не написано на этом "системном" языке кроме цветных версий grep и ls?
Почему так много зависимостей в каждый проект тянется?
27 3311356
>>11343

>Зачем нужен вездесущий маркетинг и реклама?


Его нет

>Почему нельзя собрать проект без интернета?


Можно

>Почему нельзя называть переменные "не политкорректными" названиями?


Можно

>Почему async и лайфтаймы выворачивают язык наизнанку?


Что значит выворачивают наизнанку?

>Почему в сообществе одни трансы и пидоры?


Общемировая практика

>Почему до сих пор ничего толком не написано на этом "системном" языке кроме цветных версий grep и ls?


Написали, но если хочешь что то конкретное то можешь начинать писать хоть сейчас

>Почему так много зависимостей в каждый проект тянется?


Я ебу почему в твои проекты так много зависимостей тянутся? Либо убирай из сам, либо проси разрабов убрать ненужные зависимости
28 3311357
>>11343

>Зачем нужен вездесущий маркетинг и реклама?


Поставь adblock.

>Почему нельзя называть переменные "не политкорректными" названиями?


Можно.

>Почему async и лайфтаймы выворачивают язык наизнанку?


Не выворачивают.

>Почему в сообществе одни трансы и пидоры?


Микропластик.

>Почему до сих пор ничего толком не написано на этом "системном" языке кроме цветных версий grep и ls?


Напиши.

>Почему так много зависимостей в каждый проект тянется?


Не тяни.
29 3311368
>>11295
Одно дело когда по IP блочат, совсем другое когда с другой стороной ищут русских под кроватью всеми способами. В том числе начинают резать "русский" код, что бы это ни значило. Я уже приводил пример с линуксом - там китайский/русский код подчищали, по буковкам "ру" банили, из списка авторов кода в нарушение лицензии убирали. Как тут тебе зеркала помогут не понятно. В симейке/ГОвне хотя бы нет привязки к пердольным репозиториям под юрисдикцией швятой, а просто по ссылке на репу зависимости ставятся, всё децентрализовано. А тут фактически нужно будет свою отдельную репу карги делать и поддерживать, чего естественно не будет никогда.
30 3311464
>>11368

>а просто по ссылке на репу зависимости ставятся


В карго можно прописать ссылку на гит

> тут фактически нужно будет свою отдельную репу карги делать и поддерживать, чего естественно не будет никогда.


В чем проблема? Максимум сотню широкоупотребимых залить на фсбхаб даже просто руками ничего не стоит.
31 3311551
>>11356
>>11357

>Почему нельзя называть переменные "не политкорректными" названиями?


>Можно


Даже deadbeaf?
32 3311570
>>11551
Нет, deadbeef нельзя, но зато можно nigger, faggot etc.
33 3311577
>>11570
Почему ещё не запретили? Довольно странно. Пойду создам петицию на форуме спидерастов. Ещё нужно запретить BABE и прочие женоненастнические символы. я реально это сделаю через пару месяцев, найму пару прогрессивных компаний для этого
34 3311581
>>11570
Кок разве такое позволит сделать?
35 3311596
>>10966

>c -> zig


На ху я? Если можно на С писать без перделок и свистелок?
36 3311602
>>11343

>Зачем нужен вездесущий маркетинг и реклама?


Кстати услышал тут в такси по радио рекламу крутили, типа ставь наш новый молодежный язык и будешь круче всех. По телевизору вообще 24/7 его рекламу крутят, я редко его включаю, но как не включу везде реклама раста. Ну я зашел к ним в офис в Питере на Рубинштейна 24, мне сказали что можешь бесплатно пользоваться, но чтобы установить нужна флешка, свою нельзя только фирменную, пришлось покупать фирменную, она стоит 100$, но из-за ссанкций ее везут через Казахстан, плюс НДС и растоможка и в рублях уже 16800. Попутно всучили подписку на serde за 499 в месяц. Вот тоже думаю совсем маркетологи охуели
37 3311608
>>11368
Как показать что ты тупой не говоря об этом даже лень комментировать
38 3311611
>>11127
Пишу на Си и инструмент типа cargo не нужен, а то и был бы во вред.
39 3311616
>>11611
Как ты собираешь проекты, если там много файлов?
40 3311617
>>11616
Дикарь-зумерок не слышал про инкрементальную сборку?
41 3311628
>>11617
Типа ты вручную пишешь gcc file1.c, потом gcc file2.c и т.д.?
42 3311630
>>11628
Этот растошизик даже мыслить не может вне своей карго-хуйни, лолд. Вот это выдрессировали опущенца.
43 3311635
>>11628
Я типа могу Makefile написать и билдить всё скриптиком, хоть на верилоге, хоть на Си. Могу на Cmake написать, и билдить сгенерённым мэйкфайлом. Можно забиндить всё это дело в моём емаксе на f9 и не париться вообще, алсо никакой непонятной хуйни и анальной зависимости от вендора карги/другого магического комбайна, работало 30 лет назад и ещё также (с оговорками лол) проработает 100 лет.
# OP 44 3311663
>>11343

>Почему нельзя собрать проект без интернета?


Хм, поподробней можно?

>Почему нельзя называть переменные "не политкорректными" названиями?


Coolstory? Не принимают код в Open Source сообществе, или за недопущением переменных с неправильными названиями следит сама IDE/компилятор?

>Почему в сообществе одни трансы и пидоры?


Сейчас трансов и пидоров, нет только разве что в Delphi (потому что он как Неуловимый Джо, никому не нужен) и в C (потому что там нужно реально мозгами шевелить, а среди реально мозговитых, "нитаких как все" квиров, обычно не встречается).
45 3311667
>>11663
Да ладно сразу на ум приходит создатель такого тула как Yosys.
46 3311714
>>11127
Карго и npm зло, они видимо пошли по пути го
https://zig.news/edyu/zig-package-manager-wtf-is-zon-558e
47 3311727
>>11714

> json


Больные ублюдки. И так билд-скрипты как письмена шизов, только с мейкфайлами соперничать, так ещё и мету в жсоне делают, пиздос.
# OP 48 3311730
>>11097
Проблема в том, что просто кодить на C не дают. Весь FAANG срочно переходит на Rust и даже Белый Дом требует на него переходить.
16476376078490.jpg184 Кб, 640x370
49 3311733
>>11295
В npm были же диверсии в либах по ip, причем там дебил навредил больше своим службам, которые работали в сетях Беларуси и им все потерли (осталась его фото). Из-за флуда в пакетах говна можно засунуть в любой вложенности, а так как в случае карго ты не владеешь своими пакетами после публикации то проблемы могут иметь фанатичный характер.

Менеджер пакетов не должен быть привязан к одной репе. Да и сами репы имеют специфичный формат, а нужно как в го или зиге - скачал, если что, ручками и закинул. Такой подход так же не создает миллион мини реп.
50 3311734
>>11714
Ебать вот это ПРОСТОТА, нахуя такой велосипед, если можно как сегодня поставить deb пакет со всем нужным/сконпилить из исходников привычным способом.
51 3311753
>>11730
Естественно его рекомендует белый дом, карго вроде настроен так что автоматом подтягивает версии 1.1.х, то есть цру может просто включать и отключать бэкдоры когда надо в любой цепочки (в каком-нибудь очередном "left-pad"). Просто идеальная платформа.
52 3311755
>>11727
Там не json, это анонимные структуры зига. Автор говорит "похоже" на json. В мире зига даже билдинг пишется на зиге.
53 3311776
>>11730
Кто не дает? Они сейчас с тобой в одной комнате?
Си язык богов, скорее загнется все остальное чем си, поэтому хорошее обновление языка не помешало бы. Естественно веб макакам это не подойдет, да и хруст не особо для вебмакакинга подходит, эта беда с асинками, да и костылище сердо.
54 3311786
>>11733

> Менеджер пакетов не должен быть привязан к одной репе.


Cargo не привязан к одной репе - можешь использовать любую другую доступную.

> Да и сами репы имеют специфичный формат,


Вся специфичность - наличие cargo.toml в папке с пакетом.

> а нужно как в го или зиге - скачал, если что, ручками и закинул. Такой подход так же не создает миллион мини реп.


В cargo.toml ты можешь использовать сторонний репозиторий, git и пути файловой системы для пакетов. Вот прям ручками качаешь, ручками распаковываешь в папочку и ручками прописываешь путь к этой папочке - всё
55 3311788
>>11786

> любую другую доступную


Я хочу любую другую поддерживаемую. Ясен хуй напердолить можно что угодно, но тогда смысл в карго пропадает, зависимости по ссылкам на гитхаб намного проще в этом случае. А сколько-нибудь поддерживаемая только официальная.
56 3311790
>>11788
Вот тебе по прямым ссылкам на любой гит репозиторий, можешь выбрать нужный коммит, тег, ветку и путь
https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#specifying-dependencies-from-git-repositories
17295196031172.png362 Кб, 564x872
57 3311797
>>11753
Так, вот сейчас стало интересно - что это за cargo и с чем его едят?
Просто сколько лет программировал - ни разу ни одно средство разработки не требовало Интернета. Кроме разве что, FlutterFlow но там собственно, само средство разработки исполняется в облаке, а доступ через браузер.
58 3311807
>>11786

>Cargo не привязан к одной репе - можешь использовать любую другую доступную.


Ну мы же говорим про реальный мир, а не вымышленный с единорогами, да? Можно, но де-факто это не так.

>Вся специфичность - наличие cargo.toml в папке с пакетом.


Скорее всего есть какой-то формат и просто сорцы не положить, мне лень разбираться, на деле всегда есть какие-то костыли у такого подхода.

В общем, когда появиться с десяток реп по типу как у maven, тогда можно будет еще говорить о свободе. (такого не будет, сразу отменят тебя)
59 3311824
>>11790
Это ты предлагаешь все зависимости зависимостей так пердолить?
60 3311845
>>11797
Мне больше всего напрягает то, чтобы писать под винду надо тянуть вижлу и С++ билдер в 6гигов.
У зига так же?
61 3311851
>>10716 (OP)

>https://2ch.hk/pr/src/3310716/17302140799711.jpg (М)


Ого олдфаг в треде. Поведай нам свой экспириенс в разработке, тебе овер 40 лет.
62 3311859
>>11824
Ну это уже как тебе угодно
63 3311863
>>11845

> 6гигов


Не пизди, 1.6.
64 3311869
>>11807
В реальном мире у меня для личного пользования несколько впс в разных регионах с впн, а для рабочих задач поднята artifactory с кешированием и проксированием до crates, docker hub, nuget, npm и прочего - полнейшая свобода.
Ты какую-то хуиту придумал и сам ее боишься как тот конь который насрал посреди манежа и пугался своего говна
65 3311875
>>11869

>В реальном мире у меня


впн отрубается так же легко, как пукнуть в лифте
66 3311879
>>11875
Вот как cloak и v2ray научишься отрубать - сразу пиши, а пока что попустись
67 3311886
>>11879
Впервые про роутеры слышишь? Нет никакой проблемы трафик перекидывать на VPN на уровне роутера, а не софта. VPN клиент в любом контейнере поднимаешь хоть на самом роутере.
68 3311909
>>11879
2011 год - хаха они не могут запретить <базворд>
-----вы находитесь здесь-----
2024 год - хаха они точно не смогут запретить <еще один базворд>

тор тоже не "могли заблокировать" а потом заблокировали, лол
После ввода китайского опыта будут просто автоштрафы прилетать за твои базворды, на твою карту/госуслуги.
haskell.jpg246 Кб, 1024x768
69 3311917
>>11909

> на твою карту


Хотя кого я обманываю
70 3311928
>>11786

>Cargo не привязан к одной репе - можешь использовать любую другую доступную.


Безумный растошиз сейчас всерьёз эту хуйню высрал? Ору нахуй с оправданий.

Нет чтобы признать что растохуйня без анального каргокала не работает нормально, но шиз продолжает какие-то безумные маняфантазии высирать.

К чему всё это? Очевидно что растом пользоваться просто невозможно в современных условиях, он для этого не предназначен.
71 3311981
>>11928
Не гори так мань, сходи там pkgconfig подергай, autotools сконфигури, cmakelists.txt поправь - ну у тебя столько дел в твоей "испытанной временем" экосистеме, а ты тут ходишь позоришься, тролишь тупостью, уже даже скучно тебя обоссывать
72 3311993
>>11863

>Не пизди, 1.6.


Я бы тебе поводил скриншотом по губам, но к сожалению все уже установлено (там даже больше 6гб).
Раз установилась вижла я еще шарпы поковырял, лол
73 3311996
>>11993
Так кто тебя заставляет ставить студию? Ставь только тулчейн.
74 3312001
>>11981
Зачем мне это делать, я же не безумный растошиз который вместо написания программ копается в конфигах и каргокале.
1701884341711.png182 Кб, 1660x1208
75 3312023
Те кто жалуется на раст, посмотрите какая красота у зиге. Там реально филиал дурки, такого даже в крестах в STL нет.
76 3312029
>>11996
установщик раста и заставляет.
77 3312030
>>12023
Что там? Или ты хочешь чтобы мы пошли изучили синтаксис зига чтобы понять твою мысль?
78 3312032
>>12023
К сожалению филиал дурки в другом месте. я так понял ты в первые увидел правосторонний кодинг когда возвращают сразу инициализацию вместо присвоения в переменную? Тебе понравится котлин
79 3312034
>>12023
Кстати легко читается, даже не зная зига не режет глаза.
Загугли - ? это опшены, а встроенные функции через собаку.
80 3312035
>>12029
Не пизди. Даже если тебя отправляет в установщик студии, то там можно выбрать только тулчейн без самой студии.
81 3312051
>>12035
Да какая разница пиздишь ты, это не отменяет того что надо тянуть гиги за шаги.
82 3312056
>>12051
Пользователь винды опущенный чмошник и должен страдать
Мимо
83 3312058
>>12051
А на линуксе тебе не надо тянуть сто зависимостей и gcc?
84 3312065
>>12056
Ща бы покупать пеку с 64 гигами для компиляции цветного grep и не играть в компьютерные игры.
85 3312067
>>12056
Разве Линус разрешал тебе использовать пинус?
На самом деле обосрались тут не вин юзеры, а раст, который победил С++, но при этом без С++ тулинга не собирается.
86 3312282
>>12062 (Del)
>>12065
>>12067
Найс подрыв от виндусятников
87 3312622
>>12282
Какой устойчивый манямир, не раст обосрался, а виндузятники. Так и запишем.
И кто вам разрешал сидеть на финском линуксе?
88 3312628
>>12622

>финском


Американском если быть точнее и не просто linux, а GNU/Linux GNU/Red Hat/Linux
89 3312917
>>12628

>GNU


Столлман уже высказал свое мнение? Или молча в сторонке грызет мозоли?
90 3312919
>>12917
Он вообще приболел немного
# OP 91 3312936
>>12282
>>12622
Растоман + линуксоид = долбоеб в квадрате.
92 3312962
>>12936

># OP


>Растоман


Лол, а ты тогда кто? Или по доброте душевной на зарплате чужие треды перекатываешь?
image.png37 Кб, 739x399
93 3314409
Кто-нибудь раст на арме юзал? Допустим, у меня 16 ядер (32 потока), на пике я получу прирост производительности в четыре раза? IO не является узким местом и все упирается в CPU.
# OP 94 3314411
>>12962
Интересующийся/зоонаблюдающий.
2d59758586af0f2c96b0a14cffc58e56.png73 Кб, 1280x1000
95 3314509
>>14409

>на пике я получу прирост производительности в четыре раза?


Может получишь, а может и нет, а может вобще хуже станет
96 3315720
>>14409

>на арме


Как ты себе представляешь это? Просто переход на другую систему команд в вакууме? И при чём тут яп высокого уровня?
97 3315771
>>10716 (OP)
Своего ide написанного на русте не завезли. Ясно.
98 3315850
>>15771
Не нужно
99 3315863
>>15850
Конечно. Это же значит, что нужно что-то разрабатывать. Мало того, ещё и чтобы по уму все работало.

Я кстати заметил, что в тредах о русте сам код не обсуждается в принцепе, что показательно. Видимо секта раста - это методичка о том, какой он хороший, свободный и хороший.
100 3315875
>>15863
Этот тред пристанище шизов, если хочешь обсудить язык, то есть группы в телеге там обычно таких банят. Тут даже ОП на расте не пишет, а просто так перекатывает лол
101 3315876
>>15863

> Что вы код не обсуждает


> Так начни сам обсуждать


> Я!?

102 3315879
>>15876
Он наверное припёрся обсуждать zed, не просто так начал накидывать про иде, а тут чего-то не хотят, пусть сам с собой поразвлекается
103 3315883
>>15879
Ghbxtv nen zed?
ты ещё Notepad++ идешкой назови.
104 3315885
>>15883
сук.

>Причем тут zed

105 3315886
>>15879

>не просто так начал накидывать про иде


а что, что-то неудобное?
106 3315891
>>15886
Да не, всё удобно, обсуждай
image.png1 Мб, 1280x720
107 3316041
>>15863

>Я кстати заметил, что в тредах о русте сам код не обсуждается в принцепе, что показательно.


А ты такой же наблюдательный, как Слепой Пью. В Говноланге постоянные срачи на тему Котлина/Шапрпа/Джавы. В Джаве Котлин/Шарп/Го. Тут вся доска такая.
rust-be-like-v0-4axixtper9pb1.webp45 Кб, 500x707
108 3316229
>>15863
Одно дело накручивать опросники и делать враперы, другое дело писать качественный софт с нуля.
109 3316350
>>15863

>в тредах о русте сам код не обсуждается в принцепе


В прошлом треде смотри.
>>3308401 →
Там ещё было, но мне лень скроллить. Большая часть постов - толстые набросы и ответы на них. Агрессивный маркетинг привлекает не только потенциальны клиентов, но и поджигает дупы сектантам других языков, которые сюда прибегают что-то доказывать. Впрочем, без них мы бы затонули, наверное.
110 3316439
>>16350

>Агрессивный маркетинг привлекает не только потенциальны клиентов, но и поджигает дупы сектантам других языков, которые сюда прибегают что-то доказывать.


Вот если есть маркетинг, то он работает в первую очередь на них, прям с таким усердным рвением нужно приходить сюда и что-то доказывать лол. Как религиозные фанатики показывают свои коран/библию/сторожевые башни представителем других конфессий и готовы усраться что-то доказывая
111 3316508
>>16439
Искусственный хайп привлекает не очень умные массы, от чего появляется мемы типа "а вы не думали переписать на раст" или "дело не в языке, дело в навыке", или "половина раст чата состоит из питонистов" итд. Чтобы это увидеть надо сидеть в забугорном инете, сейчас лулзов меньше, но маркетологи продолжают натягивать раст то на питонистов то на джаваскрипшиков, который он нахер не сдался и которые не имеют бэкграунда С++, чтобы писать либы, но зато те как попугаи повторяют одни и те же идеи раста через свою призму тупости.

Отсюда феномен, его все любят, особенно те кто на нем не пишет, потому как идеи раста хороши (хоть за 10 лет надоели уже), но глубинный раст уродлив и неудобен да, проблема навыка, или в нашей интерпретации - неосилил
112 3316518
>>16508
Почему не удалось продать аду?
113 3316537
>>16350
>>16439
Plot twist: агрессивные маркетологи раста под видом хейтерков сами постят сюда максимально тупые претензии, чтоб двачекомьюнити их блестяще опровергало.
Хейтерки обоссаны, комьюнити в сияющих доспехах сияет, тред живёт, профит!

Хотя я в этом треде с 2017 сижу-пержу и вижу, что претензии-то повторяются из треда в тред, можно и FAQ чисто под это запилить но мне лень расписывать.

Вот набросаю черновик пожалуй:

Q: В комьюнити одни сплошные LGBTQGCCPP
A: Похуй, ты как был одиноким пидором, так им и останешься

Q: Компилятор раста использует LLVM, а значит не настоящий
A: Похуй, фронтенд на расте, а хуячить собственный бекенд под все поддерживаемые LLVM архитектуры, когда есть готовый (и пилится GCC-кодген) - бестолковая трата ресурсов

Q: На расте нет больших/известных/крутых проектов
A: Похуй, но есть: https://github.com/rust-unofficial/awesome-rust?tab=readme-ov-file

Q: Раст задеприкейтил Windows 7
A: Похуй, оно давно end of life

Q: Раст для Windows требует установки Visual Studio C++ Build Tools
A: Похуй, это всего несколько гигов. Можно обойтись и MSYS2/x86_64-pc-windows-gnu . От туда нужны либы и линкер

Q: RC это GC
A: Нет, долбоёб, это shared_ptr (да и похуй)

Q: А вот зиг/плюсы/сишечка ...
A: Похуй

Q: Синтаксис сложна/нипанятна
A: Похуй, ты ещё туповат для него

Q: Бороу-чекер сложна/нипанятна
A: Похуй, он умнее тебя

Q: Агрессивные маркетологи раста ...
A: Похуй, алсо смешно читать как на opennet в любом посте с упоминанием раста горят жопы хейтерков

Q: Раст сейф но кругом ансейф ряяя
A: Похуй, зато сразу видно в коде что этот блок - ансейф, а не как в сишке/плюсах сплошной ансейф

Q: Проект не собрать без инторнета и доступа к crates.io
A: Похуй, возьми VPN или подними свой кеширующий/приватный реестр пакетов на artifactory/чём-то ещё и пользуйся. Не можешь - иди нахуй

Всё, заебался, пойду чаю попью
113 3316537
>>16350
>>16439
Plot twist: агрессивные маркетологи раста под видом хейтерков сами постят сюда максимально тупые претензии, чтоб двачекомьюнити их блестяще опровергало.
Хейтерки обоссаны, комьюнити в сияющих доспехах сияет, тред живёт, профит!

Хотя я в этом треде с 2017 сижу-пержу и вижу, что претензии-то повторяются из треда в тред, можно и FAQ чисто под это запилить но мне лень расписывать.

Вот набросаю черновик пожалуй:

Q: В комьюнити одни сплошные LGBTQGCCPP
A: Похуй, ты как был одиноким пидором, так им и останешься

Q: Компилятор раста использует LLVM, а значит не настоящий
A: Похуй, фронтенд на расте, а хуячить собственный бекенд под все поддерживаемые LLVM архитектуры, когда есть готовый (и пилится GCC-кодген) - бестолковая трата ресурсов

Q: На расте нет больших/известных/крутых проектов
A: Похуй, но есть: https://github.com/rust-unofficial/awesome-rust?tab=readme-ov-file

Q: Раст задеприкейтил Windows 7
A: Похуй, оно давно end of life

Q: Раст для Windows требует установки Visual Studio C++ Build Tools
A: Похуй, это всего несколько гигов. Можно обойтись и MSYS2/x86_64-pc-windows-gnu . От туда нужны либы и линкер

Q: RC это GC
A: Нет, долбоёб, это shared_ptr (да и похуй)

Q: А вот зиг/плюсы/сишечка ...
A: Похуй

Q: Синтаксис сложна/нипанятна
A: Похуй, ты ещё туповат для него

Q: Бороу-чекер сложна/нипанятна
A: Похуй, он умнее тебя

Q: Агрессивные маркетологи раста ...
A: Похуй, алсо смешно читать как на opennet в любом посте с упоминанием раста горят жопы хейтерков

Q: Раст сейф но кругом ансейф ряяя
A: Похуй, зато сразу видно в коде что этот блок - ансейф, а не как в сишке/плюсах сплошной ансейф

Q: Проект не собрать без инторнета и доступа к crates.io
A: Похуй, возьми VPN или подними свой кеширующий/приватный реестр пакетов на artifactory/чём-то ещё и пользуйся. Не можешь - иди нахуй

Всё, заебался, пойду чаю попью
image.png227 Кб, 287x402
114 3316546
>>16518
Потому что некромантия запрещена.
115 3316550
>>16546
Ада - современный язык, алсо, у нас есть спарк.
116 3316554
>>16537

>Похуй


>Похуй


>Похуй


>Похуй


Классическое злоупотребление .clone
117 3316593
>>16537
Q: В комьюнити одни сплошные LGBTQGCCPP
A: Зашквар, пацаны не поймут.

Q: Компилятор раста использует LLVM, а значит не настоящий
A: Ну по суди да, они смогли только осилить ASТ дерево, да и то поставили макросы затычки.
Ты забыл что это говнина компилируется долго.

Q: На расте нет больших/известных/крутых проектов
A: Расту 10 лет, это настораживает, даже у говна есть флагманы, а он ппц какой неудобный.

Q: Раст задеприкейтил Windows 7
A: Там была проблема обратной совместимости. То есть, ты можешь взять старые рантаймы/интерпретатор любого языка и запустить на старом парке компов (всякие банкоматы и кассы могут на этой залупе еще жить). У раста такой возможности не существует из-за того что винда не ставит Visual Studio C++ Build Tools. В общем, нельзя делать так чтобы кабан соснул, иначе соснет язык.

Q: Раст для Windows требует установки Visual Studio C++ Build Tools
A: Расту как победителю С++ нужен тулинг С++, эпик вин.

Q: RC это GC
A: Да, с точки зрение терминологий CS. Но что в этом плохого (в реале это узкая и локальная сборка мусора, тут просто страдает маркетинг, сказать что у раста есть GC, это удар по языку, но язык без RC не может, по дизайну)

Q: А вот зиг/плюсы/сишечка ...
A: Нам нужны не пидорские языки, а интеропы С/C++

Q: Синтаксис сложна/нипанятна
A: Не сложный, он неудобный. Нас буквально хеллоу ворд встречает с макроса.

Q: Бороу-чекер сложна/нипанятна
A: Не сложный, он неудобный.

Q: Агрессивные маркетологи раста ...
A: Агрессивный маркетинг рождает ровно таких же фанатиков с другой стороны, с линукс комьюнити это показывает.

Q: Раст сейф но кругом ансейф ряяя
Q: зато сразу видно в коде что этот блок - ансейф, а не как в сишке/плюсах сплошной ансейф
A: Сначала тебе из каждого утюга говорят про безопасность, а потом на деле оказывается не так все просто. Ты ловишь фрустрацию. Еще раз, агрессивный маркетинг зло, не надо считать программистов за дебилов, ибо у тебя останутся только тупые фанатики, вместо реал кодеров.

Q: Проект не собрать без инторнета и доступа к crates.io
A: Похуй, возьми VPN
Сидит маленький мальчик без ножек на диване
смотрит мультики... тут в комнату врывается папа
И переключает на футбол...
- Пааап .. но я же мультики смотрю
-НУ тогда встань и переключи
-Но паап.. у меня же нет ножек...
-НЕТ НОЖЕК - НЕТ МУЛЬТИКОВ
117 3316593
>>16537
Q: В комьюнити одни сплошные LGBTQGCCPP
A: Зашквар, пацаны не поймут.

Q: Компилятор раста использует LLVM, а значит не настоящий
A: Ну по суди да, они смогли только осилить ASТ дерево, да и то поставили макросы затычки.
Ты забыл что это говнина компилируется долго.

Q: На расте нет больших/известных/крутых проектов
A: Расту 10 лет, это настораживает, даже у говна есть флагманы, а он ппц какой неудобный.

Q: Раст задеприкейтил Windows 7
A: Там была проблема обратной совместимости. То есть, ты можешь взять старые рантаймы/интерпретатор любого языка и запустить на старом парке компов (всякие банкоматы и кассы могут на этой залупе еще жить). У раста такой возможности не существует из-за того что винда не ставит Visual Studio C++ Build Tools. В общем, нельзя делать так чтобы кабан соснул, иначе соснет язык.

Q: Раст для Windows требует установки Visual Studio C++ Build Tools
A: Расту как победителю С++ нужен тулинг С++, эпик вин.

Q: RC это GC
A: Да, с точки зрение терминологий CS. Но что в этом плохого (в реале это узкая и локальная сборка мусора, тут просто страдает маркетинг, сказать что у раста есть GC, это удар по языку, но язык без RC не может, по дизайну)

Q: А вот зиг/плюсы/сишечка ...
A: Нам нужны не пидорские языки, а интеропы С/C++

Q: Синтаксис сложна/нипанятна
A: Не сложный, он неудобный. Нас буквально хеллоу ворд встречает с макроса.

Q: Бороу-чекер сложна/нипанятна
A: Не сложный, он неудобный.

Q: Агрессивные маркетологи раста ...
A: Агрессивный маркетинг рождает ровно таких же фанатиков с другой стороны, с линукс комьюнити это показывает.

Q: Раст сейф но кругом ансейф ряяя
Q: зато сразу видно в коде что этот блок - ансейф, а не как в сишке/плюсах сплошной ансейф
A: Сначала тебе из каждого утюга говорят про безопасность, а потом на деле оказывается не так все просто. Ты ловишь фрустрацию. Еще раз, агрессивный маркетинг зло, не надо считать программистов за дебилов, ибо у тебя останутся только тупые фанатики, вместо реал кодеров.

Q: Проект не собрать без инторнета и доступа к crates.io
A: Похуй, возьми VPN
Сидит маленький мальчик без ножек на диване
смотрит мультики... тут в комнату врывается папа
И переключает на футбол...
- Пааап .. но я же мультики смотрю
-НУ тогда встань и переключи
-Но паап.. у меня же нет ножек...
-НЕТ НОЖЕК - НЕТ МУЛЬТИКОВ
118 3316609
>>16593
Почему на расте постоянно все приходится переписывать, как так вышло? Почему это бай дезигн?
119 3316697
>>16593

>Ты забыл что это говнина компилируется долго.


По сравнению с чем и на каком коде?

>Расту 10 лет, это настораживает


Какой крупный проект, которым все-все-все пользуются, появился на каком-либо другом языке за 10 лет?

>даже у говна есть флагманы,


Какая-то хрень для докера, который сам по себе нужен, потому что весь софт нахуй сломан?

>То есть, ты можешь взять старые рантаймы/интерпретатор любого языка и запустить на старом парке компов


Ты можешь поставить старый Раст на старую винду. В худшем случае придётся собирать самому.

>Расту как победителю С++ нужен тулинг С++, эпик вин.


Ты можешь напрямую дёргать системные вызовы винды, если тебя это настолько беспокоит. Придётся пересобирать половину тулчейна, но это в любом языке плата за ебанутость. Го на Линуксе каждые полгода стандартную либу правит.

>но язык без RC не может, по дизайну


Ни разу не пользовался. Несколько раз был нужен Сell и UnsafeCell по всяким эзотеричным нуждам.
120 3316708
>>16697

>UnsafeCell


РЯЯЯ АНСЕЙФ
121 3316750
>>16593

>Q: Проект не собрать без инторнета и доступа к crates.io


>A: Похуй, возьми VPN


>Сидит маленький мальчик без ножек на диване


Сидит тупой безрукий мальчик на диване, который в 2024 не смог завести себе vps'ку за пару криптобаксов вне РФ, ну и пусть себе сидит, нам не нужен дурачок
122 3316807
>>16508
>>16537
Не читал, извини, но ты продолжай писать
123 3316809
>>16697
>>16750
Да нахуй вы его кормите, пусть сам с собой общается
124 3316865
>>16593

> маленький мальчик без ножек


> не может запустить впн


Типичный местный плюсовик
125 3317111

>По сравнению с чем и на каком коде?


Какая разница с чем? Вечно вам надо сравниваться, ладно, например с го.

>Какой крупный проект, которым все-все-все пользуются, появился на каком-либо другом языке за 10 лет?


Го - губер, докер, еще что-то там.

>даже у говна есть флагманы,


>Какая-то хрень для докера


Что за тупость?

>Ты можешь поставить старый Раст на старую винду.


Именно про это и говориться что не могу, физически просто не могу, я уже не знаю как это объяснить, одно и тоже.

>Ты можешь


>Придётся пересобирать половину тулчейна


Давайте будем реалистами. Ты можешь и свой язык написать, если что-то не нравится.

>Ни разу не пользовался.


Начни уже писать программы, а не скрипты.
126 3317112
>>16750
Почему растеры такие глупые, тебе говорят нет интернета - собери впску. У тебя ножек нет, сбегай в магазин.
127 3317181
>>17112
Почему растохейтеры такие тупые? Тебе без интернета даже apt/dnf install gcc libc-dev make vim не выполнить, а ты все рвешься на расте писать. Возьми турбо-паскаль на дискетке, а лучше сходи во дворе погуляй, глупыш
128 3317255
>>17181
То есть, если я приду с флешкой на другую машину, без сети я не смогу ничего сделать? Вы че там обкурились?
129 3317291
>>17111

>Какая разница с чем? Вечно вам надо сравниваться, ладно, например с го.


Код на го будет в пять раз длиннее, потому что ни метапрограммирования, ни нормальной работы с памятью не завезли. В итоге будет одно на одно.

>Что за тупость?


Докер решает проблему управления микросервисной парашей, хотя микросервисная параша - это проблема сама по себе. Как вейп вместо сигарет.

>Именно про это и говориться что не могу, физически просто не могу, я уже не знаю как это объяснить, одно и тоже.


Что пишет?

>Давайте будем реалистами. Ты можешь и свой язык написать, если что-то не нравится.


Ты понимаешь, что это как жаловаться, на драйвера? Якобы легендарный Джон Кармак написал игру, а она вылетает, если не установить непонятный костыль с левого сайта.

>Начни уже писать программы, а не скрипты.


Чел, ты компилятор поставить не осилил.

>То есть, если я приду с флешкой на другую машину, без сети я не смогу ничего сделать? Вы че там обкурились?


На флешку нужно что-то скачать, а как это сделать, если РКН запретил?
130 3317328
Это какая то метаирония или вкатуны реально не смогли осилить запуск карго без интернета?
Ребят, вы если даже не можете две минуты в Гугле потратить, может системное программирование это не для вас?
131 3317350
>>17328

>запуск карго без интернета


>две минуты в Гугле


Проиграл.
132 3317359
>>17350
Ясно, толстота значит
image.png1 Кб, 133x36
133 3317368
>>17291

>Чел, ты компилятор поставить не осилил.


Как это отменяет то что ты пишешь скрипты?

>Что пишет?


Читай прошлый тред. Из-за того что МС задиприкейтил тулы (те 7гб С++ радости), нельзя поставить старый раст.

>Докер решает проблему управления микросервисной парашей


Да какая разница, ты просил показать флагман проект языка за 10 лет, я тебе показал. Покажи мне флагман раста (к счастью с серво вы уже не носитесь)

>На флешку нужно что-то скачать


Маневры, то есть без сети эта залупа не работает?
Мне на инет как-то срать, меня больше беспокоит что все яйца в одной корзине. И правда что карго минорные версии автообновляет? То есть можно будет шустро включать отключать руткиты?
134 3317453
>>17368

>Читай прошлый тред.


Я пытался, но какие-то долбоебы там искали геев и джавистов под кроватью, дальше не читал

>пук


Чего-то не читается что ты пишешь, но ты продолжай
135 3317459
>>17368

>Как это отменяет то что ты пишешь скрипты?


Пилю игру/движок. Не UE5, но где-то в 50 раз сложнее всех твоих хелло ворлдов. Всё работает на базе элементарного бамп аллокатора даже без RAII. Стандартные контейнеры рассчитаны на слишком общий случай и для геймдева избыточны. Rc вообще по ощущениями добавили чтобы было даже в отрыве от геймдева.

>Из-за того что МС задиприкейтил тулы


Попроси Копайлот показать, где можно на сайте МС скачать старые либы.

>Да какая разница, ты просил показать флагман проект языка за 10 лет, я тебе показал


И ты показал набор скриптов, который умеет автоматически устанавливать пакеты. Охуенно.

>Покажи мне флагман раста


Клёво же.
https://www.youtube.com/watch?v=mKoRzTK1HkU

>правда что карго минорные версии автообновляет?


Если пишешь в зависимостях звездочку, то правда.
136 3317470
>>17459

>Всё работает на базе элементарного бамп аллокатора даже без RAII


Зачем тут раст лол?
137 3317488
>>17470
Трейты, замыкания, вывод типов, паттерн матчинг, нативный код, система сборки. Этого мало? С тем же успехом можно спросить, а чем Раст хуже любого другого языка. STL в плюсах настолько же неюзабельный кал, например.
138 3317499
>>17459

>https://www.youtube.com/watch?v=mKoRzTK1HkU


Что это? Редактор для создание ассетов-башен?
Я просил флагман, а не мультяшные ассеты для юнити

>в 50 раз сложнее всех твоих хелло ворлдов


Ну я рад что это сложнее моих хеллоу вордов, казалось, что может быть сложнее хеллоу ворда, оказывается есть.
В 50 раз, говоришь? Так-с, 50 умножаем на ноль...

>даже в отрыве от геймдева.


Неожиданно, в геймдеве часто применяют сборку мусора. Даже в анрил. Если бы ты варился в геймдеве то знал бы это.
Я понял что ты очередной раскрашиватель grep
offending-95-of-the-sub-in-a-single-meme-v0-snx6rlmyod7d1.webp61 Кб, 574x1020
139 3317506
>>17488

>же неюзабельный кал, например.


Ох эти питон специалисты. А потом окажется что нужная либа на плюсах, или врайпер багован и де-факто заброшен. И вдруг неюзабельныи гавном окажется твой раст.

Открою тебе секрет, что настоящая трудность и проблема для реального программиста это не наличие трейтов, вывода типов, паттерн матчинга и замыкания, а наличие стабильных либ с тысячами человека-часов работы.
140 3317510

> а вот я тру программист и эксперт вот моё мнение


> нет это я тру программист и эксперт, твоё мнение говно, вот моё мнение



Сука дети выйдите из треда, что за цирк вы тут устроили?
И почему в треде половина анонов вобще не программирует на расте а возможно и вообще, кто то форсит тред в б или что?
141 3317542
>>17510
Это же вообще дефолт, в треде го по ощущениям большую часть постинга исходит от двух шизов - эксшепшн шиз и нинужен шиз. Возможно, второй это эволюция первого.
142 3317574
>>17499

>Неожиданно, в геймдеве часто применяют сборку мусора. Даже в анрил


Во-первых, Rc не сборка мусора. Во-вторых, Анрил переинженеренное статтерящее мыльное недоразумение, которое используют, потому что остальное еще хуже. Или это был контрпример?

>>17506

>а наличие стабильных либ с тысячами человека-часов работы.


Они требуют тысячи человеко-часов, потому что переизобретают готовые примитивы ОС поверх нескольких слоёв сериализации, виртуальных машин и такой-то матери. А по другому и не получится, потому что мы зачем-то эмулируем PDP-11.

>>17510
Ну маааам.
143 3317599
>>17574

>ряяя гц ненужно, а где нужно там деды и плохо.


>ряяя счетчик ссылок не сборка, в компьютер сайнс это сборка, а у нас нет, а если надо будет, перепишем ваш компьютер сайнс!!!


>ряяя либы ненужны, я крашу grep, мне там либы ненужны.



Я кажется стал понимать, все эти питонщики выбирают раст, потому что там нет GC и когда они слышат что умные указатели это тоже вид GC - у них взрывает пукан, мол как так я же раст терплю ради ручного управления памятью, а тут опять гц, ряяя!!!
144 3317618
>>17510

>И почему в треде половина анонов вобще не программирует на расте а возможно и вообще, кто то форсит тред в б или что?


Тут тред держится или наоборот опустел из-за них благодаря шизам или даже одному и тех кто пытается чего отвечать на эти дешевые набросы. Сюда максимум как в зоопарк можно приходить, не более того
145 3317619
>>17618

>чего отвечать


чего-то отвечать
быстрофикс
146 3317620
>>17599
Принесика ссылку на определение rc как gc из cs, а то чот ты пиздишь
147 3317621
>>17574
>>17599
Вот кстати каноничный пример специальной олимпиады - спор о том являются самрт поинтеры сборкой мусора, нормальный человек в этом споре участвовать не будет
148 3317645
>>17621
Нормальным людям и без этого понятно что умные указатели это сборка мусора.

Просто дети не в курсе что если требуется любая сборка мусора и любые умные указатели - следствие дерьмовой арахитектуры.
149 3317649
>>17645
Как в расте и C++ придумывается архитектура? Вот в джаве есть чистая архитектура, но там пиздец полный, сложно. А в низкоуровневых языках как это делается?
150 3317665
>>17542
>>17618
Мда, ну я так и понял как тред весь пролистал
Жаль конечно что из за рака тред в такое скатился раньше такие хоть только в опеннете каком нибудь сидели, а теперь и тут
151 3317668
>>17649
Отталкиваясь от данных. Смотришь на данные, как часто они меняются, как преобразуются, как долго хранятся, как запрашиваются. Выбираешь подходящие структуры для них, массивы структур, структуры массивов, многомерные массивы. Конечно же большая часть всего этого в глобале существует. Дальше пишешь под это дело всё функции, абстракции, итераторы, атомики всякие, смотря от требований и возможностей. Аллокаций в большинстве программ вообще можно избежать с таким подходом.
152 3317704
>>17645

>дети


Вот как раз таки дети заполонили тред этими срачами, при этом не давая четких определений что чем является, собственно неопределенность и позволяет обеим сторонам вилять жопой и разводить бесконечный срач. Нормальные взрослые люди начинают с терминологии и определяют рамки того что чем является и уже дальше нужно смотреть подходят ли умные указатели под критерий сборщика мусора или нет, а не просто кидаться говном.
Мимо
153 3317801
>>17621
Это у питонистов бомбит, для нормального человека нет проблемы что смарт поинтеры это локальная сборка мусора без стоп-зе-ворд. Почему растеры рвут на себе чулки от этого я не понимаю
154 3317803
>>17704
>>17620
Тебе несколько раз сказали про терминологию cs, в этом вся суть фанатиков, вы будете юлить до последнего и троллить тупостью.

Там очень просто определение
In computer science, garbage collection (GC) is a form of automatic memory management. The garbage collector attempts to reclaim memory that was allocated by the program, but is no longer referenced; such memory is called garbage.
image.png62 Кб, 360x360
155 3317805
>>17803
Этот спор можно навсегда закрыть. В прошлых тредах был пример связанного списка на rc<refcell и вроде на ансейве с сырыми указателями. Или же взять смарт поинтеры из с++ и сырые указатели, если раст ограничивает и ансейв.

И честно (с публикацией на гитхаб в докере с результатом) протестить этот список с десятками миллионов значений.
Если разница не велика - то вообще не важно GC или не GC, всегда можно обоссать оппонента, что это дешевая операция, а не костыль. Если же разница велика, втихую как крыса промолчать и спрятаться за анонимностью двача, до следующего срача.
156 3317808
>>17805
Спойлер - если указатели часто не создаются и не дропаются, то там почти нет накладных расходов (на разыменовывание).
image.png45 Кб, 898x133
157 3317809
Что лучше для вката?
RR или vscode?
158 3317979
>>17809
обмазался обоими.
После победы трампа, куда-то все растеры пропали.
159 3318086
>>17803

>Тебе несколько раз сказали про терминологию cs


Это вы между собой там спорите, кидаясь какашками в песочнице, я же написал что мимо. Но то что уже пользуетесь справочной литературой, уже хорошо, молодцы

>>17801
У нормального человека вообще не должно рвать от наличия или отсутствия сборки мусора, а нужно решать конкретную продуктовую задачу. Если при решении задачи сборка мусора не мешает, но при этом экономит еблячасы при разработке и сопровождении, то однозначно её нужно использовать. А всякие малолетние дебилы из этого срач на десяток тредов устроили на потеху публике.
160 3318092
>>17809
Если с нуля, то лучше vscode
161 3318134
>>15720
ну есть же Rust под ARM
разве я не могу взять исходники проекта и просто перекомпилировать его под ARM?
image.png10 Кб, 559x116
162 3318137
>>18092
Тоже так подумал, как то проще мне показался, да и vscode я знаю хорошо. А в чем RR выигрывает в перспективе?
Планирую активно сорцы исследовать, помниться в жб был удобный тулинг для этого и отладчик (но это в жабе, а тут хз).
image.png31 Кб, 1657x189
163 3318156
>>18137
Годно, работает
164 3318160
>>18137

>А в чем RR выигрывает в перспективе?


Он не использует lsp и при внесении изменений в код быстрее соображает в обмен на съеденную память, плюс чуть побольше возможностей для рефакторинга, а в общем и целом все тоже самое. Сам летом пересел на vscode, по началу было непривычно, а теперь всего хватает

>Планирую активно сорцы исследовать, помниться в жб был удобный тулинг для этого и отладчик (но это в жабе, а тут хз).


А вот это хз, я этим не пользуюсь, только профайлером https://github.com/flamegraph-rs/flamegraph и тот из терминала запускаю
165 3318380
>>18156
Не везде, конечно, работает как надо, но лучше чем vscode, который показывает ассемблер (хотя я может ньюфаг и просто не знаю).
166 3319342
>>19315 (Del)
Потому что тред угнали и перекатывают школьники на винде потому что в игори надо играть, которые не имеют отношения ни к расту ни к разработке в целом, чтобы всех троллить. Вот полюбуйся на ОПа >>12936
Но будучи не трудоустроенным ни дня такие не знают что почти все сидят на маках и линуксах, а виндой пользуются только опущенные пхпшники, шапрписты и игроделы. Поэтому шутка за 300 не взлетела
167 3319351
>>19346 (Del)
Попробуй репортить не через две недели, а когда видишь провокации в оп-постах после переката. И сисики писики тоже репортить не забывай. Будет тебе счастье. Страницу обнови через F5.
168 3319493
Забавное наблюдение. Я знаю что компилятор видит, что мутабельная ссылка больше не используется и как бы дропает ее, но оказалось он еще ее как бы переиспользует (адрес не меняется, как у иммутабельных)
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=ebc30b7403b9fbe00d88caab90b76d66
169 3319511
Ну как, нашли уже работу на расте?
170 3319518
>>19511
Нашёл и потерял. Как обычно, блокчейн. Брали на испытательный срок. Оказалось, что там не разобраться в теме за две недели. Надо как минимум полгода. Чтобы во всех этих ебучих транзакциях, подписях, и проч. Ничего особо не объясняли. Месяц промучался и усё.
171 3319522
>>19511
Раст это элитарный язык для души, а черкаши на галлере можно отскребать и на node.js
172 3319545
>>19522

>Раст


>элитарный язык


А ты смешной, анончик)
173 3319623
>>19522
>>19545
У меня такое чувство что кто-то сам шутит и сам над собой смеется
image.png29 Кб, 772x329
174 3319730
Я помню все носились с двухсвязным списком, но читая доку я вдруг осознал - в расте нельзя реализовать фундаментальную архитектуру IoC из-за ограничение мутабельных ссылок. Буквально на пике нарушение инкапсуляции.

Как мы делали раньше - у нас есть объекты сервисы и мы их прокидываем как зависимость везде (ну самое простое коннект к базе) сам сервис либо имеет состояния либо нет, у нас просто есть ручки которые мы дергаем и нам не важно, состояние для нас скрыто/инкапсулировано.
С точки зрения архитектуры у нас есть контекст исполнения. А как реализовать подобное в расте? Одни иммутабельные ссылки - не вариант, клонировать владение - ну не вариант вообще (100500 коннектов в базе).

Получается только постоянно прокидывать мутабельную ссылку в каскад функций
f1(&mut MyService) -> f2(&mut MyService) -> f3(&mut MyService)
И надеяться что скоуп ссылки не будет пересекаться (хотя в 90% нам буде нужна иммутабельность).

Какую архитектуру строят на расте и главное как? только без - "а-а-а неосилил", тут правда не видно вариантов для построения большой архитектуры
nJ4N0qry1zuk74UjNgXLFVI15acHMaSBsGe-sEr7WGzn2zEqKWjk4THUn5cOMiEIbuM23QhJQc5fKz3auvNAXG.jpg171 Кб, 1280x720
175 3319732
176 3319739
>>19732
Очень хорошо, а теперь в палату, нам и одного объекта для указателей хватит.
177 3319742
>>19739
Рад за вас, но только кто вы и что значит один объект для указателя и для чего вам его должно его хватить?
178 3319756
>>19732
Жесть, а если я перепутаю, мне об этом как-то скажут?
179 3319758
>>19756
Ну либо компилятор по попе даст, либо сам себе по попе за низкий перф
180 3319795
>>19730
Mutex
181 3319807
>>19795
Это же вроде про работу с критическими секциями, или у раста это несет дополнительный смысл?
image.png455 Кб, 1920x1080
182 3319828
>>19732
Новая версия я обязательно выживу
Pt59X0mmtG9.jpg236 Кб, 1920x1080
183 3319836
184 3319848
>>19807

>Это же вроде про работу с критическими секциями,


Это про смартпоинтеры, то что ты выше писал где тебе нужно передать кучу мутабельных ссылок. В большинстве случаев тебе для этого потребуется Arc<Mutex<T>> на картинке выше многопоточность и не нужно следить за владением
185 3319855
>>19730
Как же ору с опущенного джавахуесоса.
186 3319867

>CISA recommends that developers transition to memory-safe programming languages such as Rust, Java, C#, Go, Python, and Swift


Поясните почему в этом списке rust?
187 3319875
>>19855
Так предложи растовские бест-практикс, я не верю что в расте принято как в жопоскрипте дергать в модуле из другого модуля глобальное состояние.
188 3319878
>>19730
Передаёшь в функцию замыкание
?????
PROFIT

А OOP игрушка дьявола.
189 3319882
>>19878
Каким местом IoC про ООП? Это про связанность архитектуры и скорее про юнит тесты.
И причем тут замыкание, я даже спрашивать не буду, ты какой-то тролль или нездоров.
190 3319885
>>19882
Связанность архитектуры и юнит-тесты - это баззворды, порожденные ОО дизайном. Голоса в голове сказали нам разделить данные на взятые с потолка лоскутки, в итоге каждый кусок кода надо покрывать тестами, потому что малейшая ошибка развалит всю систему, и ты концов не найдёшь.
191 3319894
>>19885
Я одного не понимаю, нахуя этому обоссаному пидору IoC в расте (любом другом системном языке), ебало просто имаджинируйте: условная библиотечка для работы с свг форматомю, давайте затащим сюда IoC.
192 3319896
>>19875
Нет конечно же, тут вкатунов мало и люди на опыте сразу делают все через DI чтобы код можно было легко тестировать и одна часть программы знала как можно меньше о других. Разумеется речь за бекенд, как там cli и gui приложения я не в курсе. Так что ближе к жабе чем к жопаскрипту, на гошке примерно также
193 3319900
Как после запросаreqwest спарсить и вытащить только значение одного поля(допустим Phone) с JSON вида:
Ok(
Object {
"Message": String,
"Result:" Array [
Object {
"Name": String,
"Lastname": String,
"Phone": String,
},
Object {
...
},
...
],
"Success":Bool(),
},
)

В документации serde ничего нужного и близко нет.
195 3319912
>>19896

>тут вкатунов мало


>сидят невдупляют о существование базовых архитектурных паттернов.


Ладно, было ошибкой спрашивать на двачах.
196 3319915
>>19911
Не пашет
let v: Value = serde_json::from_str(data)?;
После reqwest data не &str.
197 3319927
>>19912

>Непонятно до чего хочет доебаться


>Ладно, было ошибкой спрашивать


Ладно, узнал завсегдатого шиза ИТТ, не буду кормить
198 3319928
>>19915

>После reqwest data не &str.


Скинь код целиком, что за тип у data?
199 3319938
>>19927

>узнал завсегдатого шиза


Психологическая травма?
https://www.youtube.com/watch?v=R0w5P9A3l68
200 3319940
>>19795
Скорее более подходящее оказалось interior mutability
RefCell (и Rc)
Тут даже пример сразу с моком для тестов.
https://doc.rust-lang.org/stable/book/ch15-05-interior-mutability.html
201 3319942
>>19940
Насчет шумихи с Rc, насколько я понял значение там одно, не клонируется физически, просто счетчик увеличивается и уменьшается. Так что непонятно откуда столько шумихи.
хотя это правда выглядит все как овер-костыли, RefCell уже может упасть в рантайме и тогда смысл во всем этом борроу-чекенге
202 3319943
>>19928
Разобрался, спасибо.
203 3319965
>>19938
Не умею с голубем в шахматы играть
204 3320032
Почаны, я вам промышленного программирования на расте принес
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=649484620382d9f4c54e46779948f772

Я смог достичь IoC превосходства. Спасибо Rc<RefCell (правда тут однопоточно).

>>19848
>>19795
Оказалось Mutex это RefCell для бедных для многопоточки. В общем, раст такая хрень, его надо сначала полностью изучить чтобы что-то пытаться кодить на нем.
Так то вроде норм, не сложно, но боюсь как меня еще асинки встретят.
205 3320054
>>20032
Можно вместо Rc<RefCell<T>> указывать просто дженерик, а уже конкретную реализацию сделать в структуре Context, например что-то типа этого
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=b4d95093e294d5f2b6604d00f864f830
206 3320105
>>10716 (OP)
Почему у Раста так плохо с сетью? Какую-то tokio-перделку надо подключать. Хотя бы из main её можно вынести?
207 3320212
>>20054
Я сначала пришел к такому подходу, тут без Rc вообще
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=f270ab858bc2ed0acbd2a8793576e75b

Что мне не понравилось.
1) Мы передаем иммутабельную ссылку, но структура в процессе мутируется. Выглядит грязно, это тот самый Interior Mutability Pattern, насколько это нормально я хз, по мне проще тогда просто везде мутированную ссылку прокидывать и все, как тут
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=e11c7a2a9bc11992acd8445b9530a42d
Раст, кстати, не ругает если мы кидаем мутирующую ссылку но не мутируем (в этом примере это хорошо).

2) Не понравилось что меняется API, с задуманного:
fn status(&self) -> &str
на
fn status(&self) -> String
Не хватило мозгов как вернуть ссылку от RefCell может клонировать и прописать лайфтаймы? Хз возможно ли это.
image.png18 Кб, 839x216
208 3320227
>>20212

>Не понравилось что меняется API, с задуманного:


fn status(&self) -> &str
В общем, если кто объяснит почему тут так происходит и можно ли это решить буду благодарен.
209 3320246
>>20227
Чел, у тебя данные на стеке лежат, ты не можешь вернуть ссылку на стек, потому что он очистится. В случае со ссылочным типом типа строки - только класть на кучу его.
210 3320281
>>20246
Тут же работает
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=0bbabe8a1090713a119031c74a4fe3a9

fn status(&self) -> &str {
self.status.as_str()
}
211 3320284
Правильно понимаю, что агенты фбр убили с++ тред и бампают расто тред кд?
212 3320293
>>20281
Как я понял, так специально сделано там RefCell возвращает некий тип
Ref<'_, T> (вместо &T) - может фишка в этом лайфтайме?
image.png995 Кб, 826x630
213 3320298
>>20284
Тише, мистер Андерсон
214 3320301
>>20212

>Не хватило мозгов как вернуть ссылку от RefCell может клонировать и прописать лайфтаймы? Хз возможно ли это.


Там проблема что он не уверен во времени жизни ссылки из-за чего либо клонируй, либо делай что-то внутри этого метода
215 3320302
>>20293
Попробуй скорее всего прокатит, я так на скорую руку пример накидал. Я вообще Arc пользуюсь из-за асинхронности там свои другие приколы
216 3320340
>>20032

>Я смог достичь IoC превосходства


И ни у кого в этой цепочке не пришло в голову спросить, а не хуйню ли мы делаем?
217 3320402
>>20340
Я каждый рабочий день такие вопросы задаю. А так в целом +/- движешься в правильном направлении, такой подход с DI помогает проще тестировать и не зависеть от других кусков кода. Можешь кстати сразу взять actix+sqlx и сделать какое-нибудь crud приложение, глядя на примеры в интернете
218 3320425
>>20340
Главное тут не в том делаем ли мы херню или нет, а в том что мы можем это сделать если надо.

>>20302
>>20301
Я перепробовал все что на данный момент знаю, потом погуглив нашел коммент и как я понял - RefCell ведется себя как мьютекс. Вот один недооценённый коммент, затерявшемуся среди ответов стаковерфлоу (многие рекомендуют возвращать Ref<T>, а это плохо)

You can't return a &T because the borrow() on the RefCell creates a temporary. It let's go of the RefCell-borrow once the Ref is destroyed. Think about it: By returning a Ref<T>, you are effectively write-locking the RefCell until the Ref is dropped by whoever the caller of get() is. This seems like poor isolation.
219 3320454
>>20402
>>20425

>такой подход с DI помогает проще тестировать и не зависеть от других кусков кода



Пусть у нас есть три функции, которые вызываются последовательно. Одна делает запрос в базу и складывает в более удобные массивы, вторая обрабатывает эти массивы и как-то их преобразует, а третья рендерит на базе первых двух какую-то хтмлку. Каждую из этих функций ты можешь запускать и тестировать отдельно просто через #[test] (немного сложнее в случае с асинком). Остаётся добавить какой-то смок тест, чтобы убедиться, что всё работает совместно.

Что мы получаем, превращая код в ебаный конструктор из абстрактных шизо-трейтов, ради которых еще приходится обходить боров чекер?
image.png18 Кб, 796x146
220 3320461
Самое интересное работает такой вариант
221 3320473
>>20454
Ты когда пишешь код, ты выводишь те или иные состояния программы, ты делаешь по сути те же тесты, только проверяющий код это ты сам и тесты эти одноразовые.

Проверив что все верно, ты идешь дальше.
А потом через месяц ты вносишь правки в работу этой функции и думаешь, а не отвалилось ли где-то что-то, да и как-то в падлу проверять эту функцию заново

Другой момент тестов, отлавливается кучу проблем на этапе разработке, в том числе пересматриваешь дизайн апи.

Не знаю как в расте будет с тестами. Возможно чтобы что-то замокать придется писать очень много кода, но в других языках юнит тесты просто заставляют IoC юзать.
Тут смысл что тебе не нужен какой-то сервис-контейнер - ты зависимости можешь и в мэйне раскидать, тут именно смысл в инверсии управления, например ты можешь дать коннект на тестовую базу или вообще на сервис который вместо коннекта готовый объект возвращает.
222 3320619
https://em-tg.github.io/csborrow/
Признавайтесь, кто писал.
223 3320664
>>20619

> кто писал


Шизик, борющийся с голосами в голове. Там какая-то каша, пиздец.

> struct method that returns by reference is allowed to return any reference other than the implicit this reference


Может быть потому что структура это value-тип, а класс - ссылочный? Просто возврат this из класса в шарпе вернёт внезапно ссылку, как этот шизик и пытается сделать со структурой.

> In C#, the garbage collector exists to make references last forever


> Ignoring the performance implications


Тут тоже ахуительные истории, игнорящие факт наличия оптимизаций компилятора и то что реальный GC намного сложнее, а не просто наивная реализация с референскаунтом и циклами сборки мусора.

> Maybe there’s something that makes C#’s ref subset so unusable that people just ignore it


Надо быть совсем отбитым, чтоб не понимать реальную причину. В шарпе JIT все оптимизации делает сам. Поэтому нет смысла ебаться с этим, если нет прироста производительности. А добавили ref в шарп для оптимизации жора памяти в сложных алгоритмах, а не чтоб везде это пихать в надежде получить скорость.
buttplugrustdocs.png35 Кб, 640x640
224 3321062
у меня от этой хуйни похоже пожизненная травма, вспоминаю каждый раз как юзаю раст
225 3321067
>>21062
В общем, закончил я свои небольшие исследования, набросал небольшой вывод.
1) Если брать за аксиому, что нам нужны хотя бы юнит тесты, а для юнит тестов нужна инверсия управления и постоянно прокидывание DI-сервисов, то раст становится очень неудобен.

Представим у нас есть сервис который возвращает какой-то список товаров, не важно через что он работает, важно что мы его везде прокидываем, так или иначе у сервиса есть внутренние изменчивое состояние. Чтобы достичь изменчивости, хоть она и внутренняя мы прокидываем его везде через &mut и рано или поздно утыкаемся на ограничения количества mut ссылок. Для решения проблемы мы пытаемся использовать паттерн внутренней изменчивости (Interior Mutability Pattern) и прописываем RefCell контейнер для внутренних данных, который проверяет заимствование на этапе исполнения (комптайм идет лесом), но тут же сразу вытекает другая проблема - мы не можем вернуть данные даже в режиме иммутабельности (можем, но мы по сути блочимся и отдаем лок-мютекса в чужие руки, как вариант клонировать данные и передать владение, переписав сигнатуру трейта и объекта, то есть похерев API).

Из-за кривости паттерна внутренней изменчивости, мы принимаем решение обернуть не внутренние данные, а весь наш сервис в RefCell и еще раз обернуть в Rc так как мы решаем проблему множественного mut.
В итоге DI сущности у нас становятся вида Rc<RefCell<T>> и проблема решается ценой накладных расходов на производительность и проверкой в рантайме.
Потом оказывается некоторые наши DI-сущности надо будет использовать в многопоточном режиме. Если бы это был объектный мир, мы бы внутри объекта просто задействовали лок над критической секцией, но в расте мы снова ломаем API и не просто ломаем, мы переписываем все сервисы и все сигнатуры функций c Rc<RefCell<T>> на Arc<Mutex<T> (вот ревьюер обрадуется коммиту).

2) Почему на каждом этапе мы ломали апи и полностью меняли концепцию? Проблема стара как мир - проблема протекающих абстракций. Да, раст течет как водопад.
Вот пример, у нас есть объект радио, у него сложное устройство, но наружу выставлены только тумблеры и регуляторы (мы создали абстракцию спрятав/инкапсулировав сложность). Радио помимо своей главной функции имеет в АПИ возможность установитьЧастоту(hz) и получитьЧастоту(). То есть, наше радио имеет изменчивое состояние, но опять же вся сложность работы от нас спрятана - у нас только внешние регуляторы (методы). Проблема начинается тогда, когда мы в расте создаем "иммутабельное радио" тем самым повлияв на его внутренние поведение, запретив ему устанавливать себе частоту, тем самым извне мы сломали внутреннюю логику работы объекта. Это и есть протекание абстракции, самая распространенная проблема бизнес-логики.

В общем, раст превосходный по замыслу язык, но раст совершенно не подходит для промышленной разработки. У раст совершенно нет семантического решения для множественных изменчивый состояний, то есть, когда твой мир статичен - раст добр и дружелюбен, но как только ты попадаешь в измененную сложную среду (приложения, игра, крупный софт) - раст начинает всячески тебе мешать, в итоге ты доходишь до абстракций Rc<Refcell<T> которые полностью выворачивают раст и показывают проблемы в дизайне языка.

И это я еще не дошел до асинхронного мира.
225 3321067
>>21062
В общем, закончил я свои небольшие исследования, набросал небольшой вывод.
1) Если брать за аксиому, что нам нужны хотя бы юнит тесты, а для юнит тестов нужна инверсия управления и постоянно прокидывание DI-сервисов, то раст становится очень неудобен.

Представим у нас есть сервис который возвращает какой-то список товаров, не важно через что он работает, важно что мы его везде прокидываем, так или иначе у сервиса есть внутренние изменчивое состояние. Чтобы достичь изменчивости, хоть она и внутренняя мы прокидываем его везде через &mut и рано или поздно утыкаемся на ограничения количества mut ссылок. Для решения проблемы мы пытаемся использовать паттерн внутренней изменчивости (Interior Mutability Pattern) и прописываем RefCell контейнер для внутренних данных, который проверяет заимствование на этапе исполнения (комптайм идет лесом), но тут же сразу вытекает другая проблема - мы не можем вернуть данные даже в режиме иммутабельности (можем, но мы по сути блочимся и отдаем лок-мютекса в чужие руки, как вариант клонировать данные и передать владение, переписав сигнатуру трейта и объекта, то есть похерев API).

Из-за кривости паттерна внутренней изменчивости, мы принимаем решение обернуть не внутренние данные, а весь наш сервис в RefCell и еще раз обернуть в Rc так как мы решаем проблему множественного mut.
В итоге DI сущности у нас становятся вида Rc<RefCell<T>> и проблема решается ценой накладных расходов на производительность и проверкой в рантайме.
Потом оказывается некоторые наши DI-сущности надо будет использовать в многопоточном режиме. Если бы это был объектный мир, мы бы внутри объекта просто задействовали лок над критической секцией, но в расте мы снова ломаем API и не просто ломаем, мы переписываем все сервисы и все сигнатуры функций c Rc<RefCell<T>> на Arc<Mutex<T> (вот ревьюер обрадуется коммиту).

2) Почему на каждом этапе мы ломали апи и полностью меняли концепцию? Проблема стара как мир - проблема протекающих абстракций. Да, раст течет как водопад.
Вот пример, у нас есть объект радио, у него сложное устройство, но наружу выставлены только тумблеры и регуляторы (мы создали абстракцию спрятав/инкапсулировав сложность). Радио помимо своей главной функции имеет в АПИ возможность установитьЧастоту(hz) и получитьЧастоту(). То есть, наше радио имеет изменчивое состояние, но опять же вся сложность работы от нас спрятана - у нас только внешние регуляторы (методы). Проблема начинается тогда, когда мы в расте создаем "иммутабельное радио" тем самым повлияв на его внутренние поведение, запретив ему устанавливать себе частоту, тем самым извне мы сломали внутреннюю логику работы объекта. Это и есть протекание абстракции, самая распространенная проблема бизнес-логики.

В общем, раст превосходный по замыслу язык, но раст совершенно не подходит для промышленной разработки. У раст совершенно нет семантического решения для множественных изменчивый состояний, то есть, когда твой мир статичен - раст добр и дружелюбен, но как только ты попадаешь в измененную сложную среду (приложения, игра, крупный софт) - раст начинает всячески тебе мешать, в итоге ты доходишь до абстракций Rc<Refcell<T> которые полностью выворачивают раст и показывают проблемы в дизайне языка.

И это я еще не дошел до асинхронного мира.
226 3321074
>>21067
>>21062
Случайно так получилось, что я тебя процитировал, но лого тут в тему оно же не нарушает авторских прав?
227 3321222
>>21067

>мы переписываем все сервисы и все сигнатуры функций c Rc<RefCell<T>> на Arc<Mutex<T>



Безотносительно того, это всё выглядит как креативные способы нарисовать часы в Джире, а чего не сделать враппер или алиас?
228 3321247
>>21067

>Потом оказывается некоторые наши DI-сущности надо будет использовать в многопоточном режиме. Если бы это был объектный мир, мы бы внутри объекта просто задействовали лок над критической секцией, но в расте мы снова ломаем API и не просто ломаем, мы переписываем все сервисы и все сигнатуры функций c Rc<RefCell<T>> на Arc<Mutex<T> (вот ревьюер обрадуется коммиту).


Именно поэтому нужно скрывать реализацию и везде передавать T и у тебя большинство описанных тобой проблем пропадет.

>>21222

>а чего не сделать враппер или алиас?


Или вот второй путь, структура обертка или алиас

>И это я еще не дошел до асинхронного мира.


Там тоже самое
nTkklWPfET0.mp410,1 Мб, mp4,
1250x706, 3:16
229 3321445
Вся суть программных костылей для контроля границ памяти:

Во-первых, следует отметить, что при инструментировании пользовательского приложения с помощью AddressSanitizer во время каждой операции доступа к памяти генерируется код, который проверяет корректность границы памяти.
Это приводит к значительному увеличению размера исполняемого файла и снижению производительности приложения.
Более того, требования к памяти для пользовательского приложения значительно возрастают из-за создания красных зон для всех объектов.
Еще одним недостатком использования красных зон является невозможность охватить все адресное пространство пользователя.
Например, если красная зона для некоторого объекта составляет 32 байта, а доступ к памяти относительно его расположения превышает это значение, то обнаружить такое нарушение с помощью AddressSanitizer невозможно, тогда как выполнение программы в защищенном режиме приводит к исключению из-за нарушения границ памяти.
Еще одним существенным недостатком AddressSanitizer является невозможность обнаружения ошибок доступа к памяти на границе адреса, соответствующих двум соседним байтам теневой памяти.
Первый теневой байт содержит информацию о том, что адрес, описываемый его значением, определен как неотравленный, а второй байт указывает на то, что соответствующий адрес отравлен.
Эту ситуацию иллюстрирует следующий пример на языке C:

...
char a[10]; // предположим, что адрес «a» выровнен на 8
int p = (int )&a[7];

// где-то здесь массив «a» должен быть инициализирован

return p; // здесь мы загружаем 4 байта, и один из них недействителен
Ошибка пользователя здесь заключается в чтении адреса, на который указывает переменная «p».
Первые три считанных байта будут в назначенной стековой памяти пользователя, но последний байт будет за пределами выделенной границы стековой памяти.
При проверке границы памяти адрес, находящийся в переменной «p», будет сопоставлен с теневой памятью, он будет соответствовать тому байту в теневой памяти, который содержит нулевое значение.
Таким образом, эта ошибка останется незамеченной. Во время выполнения программы с этим кодом в защищенном режиме описанная проблема будет обнаружена из-за использования дескрипторов, которые имеют точную информацию о размере памяти, доступной пользователю.
nTkklWPfET0.mp410,1 Мб, mp4,
1250x706, 3:16
229 3321445
Вся суть программных костылей для контроля границ памяти:

Во-первых, следует отметить, что при инструментировании пользовательского приложения с помощью AddressSanitizer во время каждой операции доступа к памяти генерируется код, который проверяет корректность границы памяти.
Это приводит к значительному увеличению размера исполняемого файла и снижению производительности приложения.
Более того, требования к памяти для пользовательского приложения значительно возрастают из-за создания красных зон для всех объектов.
Еще одним недостатком использования красных зон является невозможность охватить все адресное пространство пользователя.
Например, если красная зона для некоторого объекта составляет 32 байта, а доступ к памяти относительно его расположения превышает это значение, то обнаружить такое нарушение с помощью AddressSanitizer невозможно, тогда как выполнение программы в защищенном режиме приводит к исключению из-за нарушения границ памяти.
Еще одним существенным недостатком AddressSanitizer является невозможность обнаружения ошибок доступа к памяти на границе адреса, соответствующих двум соседним байтам теневой памяти.
Первый теневой байт содержит информацию о том, что адрес, описываемый его значением, определен как неотравленный, а второй байт указывает на то, что соответствующий адрес отравлен.
Эту ситуацию иллюстрирует следующий пример на языке C:

...
char a[10]; // предположим, что адрес «a» выровнен на 8
int p = (int )&a[7];

// где-то здесь массив «a» должен быть инициализирован

return p; // здесь мы загружаем 4 байта, и один из них недействителен
Ошибка пользователя здесь заключается в чтении адреса, на который указывает переменная «p».
Первые три считанных байта будут в назначенной стековой памяти пользователя, но последний байт будет за пределами выделенной границы стековой памяти.
При проверке границы памяти адрес, находящийся в переменной «p», будет сопоставлен с теневой памятью, он будет соответствовать тому байту в теневой памяти, который содержит нулевое значение.
Таким образом, эта ошибка останется незамеченной. Во время выполнения программы с этим кодом в защищенном режиме описанная проблема будет обнаружена из-за использования дескрипторов, которые имеют точную информацию о размере памяти, доступной пользователю.
230 3321596
>>21445
Что не так?
231 3321773
>>21596
Это к дискуссии о том что защита на аппаратном уровне (как у эльбруса) не актуальна и все спокойно решается софтом. Просто не решается, худо-бедно решается только в рамках виртуальных машин, у которых в свою очередь проблемы с обработкой больших массивов данных. Ну а нативные библиотеки-санитайзеры это по сути защита только от дурака, пригодное только для того что бы в тестовом режиме запустить/погонять.
232 3321848
>>21773
Во-первых, тебе никто не мешает для любого процессора написать компилятор, который вместе с каждым указателем держит длину объекта. Или тупо либу для плюсов. В 90% случаев дополнительную проверку можно будет выпилить, а остальные 10% влияния не окажут, потому что никогда не будут срабатывать.

Во-вторых, это вымученный пример, который в Расте даже не получится написать без ансейфа. Иди в плюсотред людей пугать.

В-третьих, это не исправляет программную ошибку. Твой самолёт с сиротками точно также упадёт, просто перед этим он не попортит память, а упадёт в сегфолт. Радостно. Причём, если память скорраптится в обычном проце, то с божьей помощью ничего страшного и не случится, а с Эльбрусом это сразу отключение двигателей и крутое пике.

В-четвертых, указатели и плоская память - это в 64-битной системе само по себе дорогая абстракция, от которой в парсерах и тому подобном отходят, а тут мы снихера удваиваем их размер, потому что какие-то деды в 80-х годах очень нахваливали фичу.

В-пятых, Эльбрус не взлетит, хватит топить за этот кал.

>у которых в свою очередь проблемы с обработкой больших массивов данных


Как и у Эльбруса.
Kobe Zoo💕 カピバラが好き.mp43 Мб, mp4,
720x1280, 0:24
233 3321931
>>21848

>для любого процессора написать компилятор, который вместе с каждым указателем держит длину объекта.


И как это убережет от нарушений границ? Как ты проверишь обращение по указателю поехавший?

>Во-вторых, это вымученный пример, который в Расте даже не получится написать без ансейфа.


Так в расте много чего нельзя написать без ансейфа и что дальше? Разговор про адрес-санитайзер с которым у вас помоему даже программы по умолчанию собираются, его надо специально отключать.

>В-пятых, Эльбрус не взлетит, хватит топить за этот кал.


То же самое можно сказать про раст. И у эльбрусанет проблем с обработкой больших данных, там есть даже аппаратный аррей-префетч который по идее хорошо ложится на растовый итератор, в том смысле что он тоже один раз взводится и в режиме цикла обходит весь массив, причем данные массива не забивают кэш как интеловый префетч, а подкачиваются в специальный буфер подкачки откуда моваются на регистры.

Концептуально раст вообще продекларировал все то, что жизненно необходимо vliw архитектурам вообще и защищенным типа эльбруса в частности - компиляция всех модулей прямо из исходников, дебаг/релиз сборка из коробки, прекомпиляция модулей, lto. Для эльбруса так же важно что запрещены манипуляции со стеком которые в принципе не работают ни в каком режиме. Но на деле получилость как с llvm в свое время - все от и до продумано/реализовано настолько хреново, что не позволяет в полной мере даже задуманного
235 3322241
>>21931

>И как это убережет от нарушений границ? Как ты проверишь обращение по указателю поехавший?



У тебя есть адрес указателя и размер буфера. Как проверить нарушение границы, не представляю.

>его надо специально отключать.


Лолчто.

>аппаратный аррей-префетч который по идее хорошо ложится на растовый итератор, в том смысле что он тоже один раз взводится и в режиме цикла обходит весь массив,



Любая fixed-function фича - это техдолг разработчика, который он хочет спихнуть на тебя. Этим не нужно хвастаться, за это нужно обоссывать. Даже видеокарты уже лет десять как умеют работать с памятью через простые load\store, кроме семплинга из текстур. Невидия вообще SIMD-ядра проапгрейдила до SIMT.
236 3322358
>>21773
Защита на аппаратном уровне это вообще другой вопрос, наличие отсутствие средств диагностики и отладки ошибок идёт в параллельной плоскости.

>Ну а нативные библиотеки-санитайзеры это по сути защита только от дурака, пригодное только для того что бы в тестовом режиме запустить/погонять.


"только от дурака" - не в тему сказано, ты вообще возможно не понимаешь, что просто наличие санитайзера/любого рантайм инструментария это только 0.005 дела, тебе же надо попасть в ошибочное состояние ещё как-то.
237 3322361
>>21848

>не получится написать без ансейфа


А без ряяя ансейфа тоже мало что получится написать. Here we go again.
238 3322362
>>21848

>а упадёт в сегфолт


Вкатун, сегфолт это хорошо, плохо когда софт не падает в сегфлолт, но тебе похоже это неизвестно.
239 3322440
>>22358

>"только от дурака" - не в тему сказано


Ну да, там в целом разговор то не про безопасность а про средство отладки программ, и то что санитайзер даже в этом плане не сверхнадежное решение. Не помню уже о чем думал когда это писал. В любом случае получаем такую картину:
a) ловим санитайзером (далеко не) все рантайм ошибки, исправляем пускаем в прод окропив святой водой и молитвами дабы бесы не проникли и стек/память не попортили.
б) при помощи отладочной либы опирающейся на аппаратные возможности ловим все что можно, исправляем и в релиз запускаем так же защищенный вариант просто без отладочной инфы.
240 3322513
>>22362
>>22440

>плохо когда софт не падает в сегфлолт


>исправляем и в релиз запускаем так же защищенный вариант просто без отладочной инфы.



Так а чем это паники, которая сразу напишет стектрейс и конкретную строчку? И без эзотерических режимов процессора.
241 3322522
>>22513

>это [лучше] паники


fixed
242 3322542
>>22513
Тем что сегфолт можно обработать, в отличии от паники. Чем тебе твой стектрейс поможет, если рантайм уже упал? И сегфолт обычно на уровне железа/ядра, это намного быстрее для производительности.
243 3322547
>>22542

>Тем что сегфолт можно обработать, в отличии от паники



Обработать и сделать что? Если у тебя в рандомном месте случилось неконсистентное состояние ты можешь максимум насрать в лог. Паника хотя бы деструкторы вызовет.

>намного быстрее для производительности


Алло, это Эльбрус, тут заведомо о производительности говорить приходится. Тем более с толстыми указателями.
244 3322564
>>22547

> Если у тебя в рандомном месте случилось неконсистентное состояние ты можешь максимум насрать в лог.


Нет. Как минимум в винде сегфолт бросает VEH-эксепшен, но наверное и в линуксе есть что-то подобное. Через AddVectoredExceptionHandler можно ставить обработчики эксепшенов и ловить Access Violation, прилетающие из ядра. Ядро убьёт процесс только если до него дойдёт этот эксепшен необработанным. Это один из беспалевных способов дебажить чужой процесс - ставить через VirtualProtect на участок памяти запрет на чтение, а как процесс пытается обратиться к своим данным случается сегфолт и выполнение прилетает в твой "зловредный" код. Ты там можешь даже посмотреть состояние регистров на момент сегфолта: https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-context
А потом можно вернуть выполнение обратно в следующую инструкцию цп, вернув из обработчика эксепшена EXCEPTION_CONTINUE_EXECUTION. При этом память самого процесса никак не меняется, все байтики как были.
245 3322565
>>22513
так это разные вещи, стектрейс выкатывает операционная система + библиотека, а вот отлавлов некоректных обращений происходит по разному: аппаратная сама контролирует процесс и просто выплевывает сигналы, лови обрабатывай, стек на эльбрусах в любом случае можно получить только от операционной системы. Программная реализация подменяет вызовы алокаторов стандартной либы и создает за границами области памяти "санитарную" зону, в которой и отстреливает (в идеале) всех нарушителей.
246 3322566
>>22565

>отлавлов


> аппаратная реализация сама

247 3322664
>>22565
А зачем всё это нужно, если всё и так отлавливается в юзерспейсе?
248 3323171
>>22440

>и то что санитайзер даже в этом плане не сверхнадежное решение


Ты опять не понял, с рантайм-инструментарием тебе ещё нужно наступить на "минное поле", чтобы вообще узнать об ошибке. То есть просто даже наличие неидеального санитайзера грубо говоря ничего не даёт без дополнительных средств, то есть твои возбухания на санитайзеры это вообще пшик, ворос вообще не в санитайзерах на практике.
Наличие аппаратных средств - это вообще другое.
249 3323172
>>22513
Если багнутый софт не падает в сегфолт, но продолжает работать, это хорошо по-твоему, мистер вкатун/джавахусесос/сисярпоподсос?
250 3323193
>>23172
зависит от софта

мимо
251 3323278
>>23172
Ты в растотреде. Багнутый софт падает с паникой, блять.
252 3323319
>>23278
если unsafe, то segfault
image.png919 Кб, 1280x668
253 3323327
>>14409
все получилось, прирост больше, чем в четыре раза
только один крейт выебнулся - SSE2 ему подавай
был выпелен, т.к. основной функционал не затрагивал
254 3323328
>>23327
*выпилен
255 3323359
>>23327
Ого, это что ты такое запускаешь?
image.png689 Кб, 563x604
256 3323365
>>23359
хуйню одну
257 3323379
>>19493
как я понимаю ему похуй mut или нет - там везде будет один адрес на стек (не кучу)
mut нужен для анализа перед компиляцией не натворил ли там делов
но я не сильно шарю, может хуйню написал
258 3323625
Ебучие пердоли делали bindgen. Если у меня либа в отдельном крейте в виде dll, то как мне эту dll положить рядом с основным бинарником при использовании либы? Из build.rs либы нет возможности узнать путь до папки билда основного проекта. Получается я должен в основном проекте либо руками dll подкидывать, либо писать build.rs чтоб найти и копировать из либы её? Очень удобно, пиздец просто.
259 3323646
>>23625
1. Зачем тебе биндген для либы на Расте?
2. Просто пропиши путь через cargo::rustc-link-search=PATH
260 3323649
>>23646

> Просто пропиши путь через cargo::rustc-link-search=PATH


Это для статической линковки. Dll так не линкуется.
261 3323652
>>23649
DLL обычно линкуется через статический трамплин, который подгружает саму либу. Или через специальные системные вызовы, если нужна ленивая загрузка, хот релоад и подобная шняга. Собственно, если ты зайдешь в папку с билдом, там будет два файла - .dll и .lib
262 3323655
>>23652

> если ты зайдешь в папку с билдом, там будет два файла - .dll и .lib


Нет, не будет. Биндген только биндинг высрет в папку билда. Dll он никуда не будет перемещать, даже если укажешь ему где она лежит. И её не окажется рядом с приложением, которое при cargo run выдаст что не может найти dll. По логике этих дегенератов она должна лежать где-то в PATH, либо кидай руками. Ну или статически линкуй. На динамическую линковку в винде смело положен хуй.
263 3323659
>>23655
Создаешь в крейте с либой .cargo/build.toml

[build]
target-dir = C:/куда_хош

И не надо никуда копировать. Ты слишком эмоционально реагируешь на хуйню, на которую нужно потратить три минуты в гугле.
264 3323675
>>23659

> C:/куда_хош


И как я узнаю куда пользователь либы хочет, лол? Скопировать не проблема, проблема узнать куда. Зависимости собираются до сборки основного проекта и не знают ничего о нём. А основному проекту похуй на всё, он собрал и радостно запускает, даже если dll нужных нет.

> на которую нужно потратить три минуты в гугле


Если бы ты потратил хотя бы минуту в гугле, то увидел что про динамическую линковку в документации ни слова нет. Я тебе ещё раз повторю, если не доходит - всё что ты предлагаешь работает только в момент сборки либы, всё что не прилинковалось статически в этот момент - раст забывает про это навсегда. Всё остальное надо делать руками или писать скрипты по поиску этого говна в кишках карго и копированию куда надо. Даже в крестах есть инструменты для этого, но не в расте.
265 3323678
>>23278

>уии раст бизапасный


Жопу ставишь?
266 3323689
>>23675

> Я тебе ещё раз повторю, если не доходит - всё что ты предлагаешь работает только в момент сборки либы, всё что не прилинковалось статически в этот момент - раст забывает про это навсегда



Плюсы работают также. Это в целом свойство винды.

https://learn.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order

Если уж на что мошнить, то так это на нестабильный ABI, у тебя в принципе нет гарантии, что бинарь узнает либу, которую собрали другой версией компилятора.

>писать скрипты по поиску этого говна в кишках карго


/release/крейтнейм.dll и /release/крейтнейм.lib. Кого ты собрался искать?
>>23678
Пока ни разу не нужен был ни дебаггер, ни санитайзер, включая unsafe код.
267 3323694
>>23689

>Пока ни разу не нужен был ни дебаггер, ни санитайзер, включая unsafe код.


Безопастность на доверии, я полагаю.
268 3323695
>>23689

> Плюсы работают также.


Нихуя не так же. В том же cmake он знает таргеты зависимостей и при линковке либы всё сам делает.

> у тебя в принципе нет гарантии, что бинарь узнает либу, которую собрали другой версией компилятора


Ты опять путаешь статическую линковку и динамическую. ABI для динамической либы всегда один, какая ещё версия компилятора, нахуй. В каком-нибудь шарпе тебе даже биндинги не нужны, просто по сигнатуре вызываешь из неё функции.

> /release/крейтнейм.dll


Начнём с того что они лежат не в release, а в release\build\lib-7644e047376f5792 с рандомным именем. А закончим тем что могут и не лежать, если автор либы не положил туда её, раст только rlib оставляет там и никаких правил на этот счёт нет.
269 3323705
>>23694
У Эльбруса безопасность вообще на товарище майоре (в смысле буквально: указатель можно создать только в режиме ядра, а ты можешь только менять оффсеты в пределах объекта. Сжатие указателей, XOR-списки и так далее - всё идет в жопу). Лучше уж на доверии, я считаю.
>>23695

>В том же cmake он знает таргеты зависимостей и при линковке либы всё сам делает.


Когда ты делаешь find_package, это заведомо предполагает, что зависимость установлена или скачена в какую-то заранее определенную директорию типа /usr/lib. И каждый find_package - это отдельный скрипт, который прописывает что-то в PATH или что-то куда-то копирует. Сам симейк нихрена не знает по умолчанию. Точно также, когда ты настраиваешь сборку в Вижуал Студии, тебе нужно вручную прописать, откуда брать хедеры, что линковать, откуда запускать.
Вот, например, сколько ебалы нужно скопипастить в консоль, чтобы собрать средних размеров проект.
https://www.wireshark.org/docs/wsdg_html_chunked/ChSetupWindows

>ABI для динамической либы всегда один, какая ещё версия компилятора, нахуй.


Чел. Если ты пишешь функцию без #[no_mangle], то она записывается в выходной файл с рандомным суффиксом. Если экзешник ищет функцию foo_l44545803458409, а в либе она лежит под названием foo_jfkghkjlghergheroiugher, то при запуске экзешника у тебя будет ошибка линковки. Это ж база.
270 3323706
>>23705

>У Эльбруса безопасность


Я про другое, пока ты формально не доказал корректность программы, всё это на доверии, были же утечки в стандартной либе, пока там rustbelt до них не добрался.
271 3323709
>>23705

> это отдельный скрипт, который прописывает что-то в PATH или что-то куда-то копирует


Потому что он может. Как я тебе уже сказал, в расте ты не можешь из зависимости какими-то разумными средствами положить dll пользователю либы куда ему надо.

> в Вижуал Студии


Там уже давно по умолчанию интеграция с vcpkg, с ним вообще однокнопочное использование либ.

> Это ж база.


Растобаза с миллионом ABI даже на одной платформе. А я про биндинги сишных/крестовых либ через bindgen, у сишных либ при динамической линковке нет проблем с этим.
272 3323716
>>23706
Я доверяю самому себе, когда пишу код на Расте. Доверяю чуть меньше, когда пишу на плюсах, но не настолько, чтобы байтоёбить с кандалах.
273 3323720
>>23709

> А я про биндинги сишных/крестовых либ через bindgen


Так а чего ты мозги канифолишь, если dll сишная? Я думал, тебе зачем-то DLL на Расте сдалось собирать. Просто кладёшь dll в корень (или пишешь PATH), а крейт-обвязку делаешь статической либой. Всё само работает.
274 3323760
>>23720

> DLL на Расте сдалось собирать


Я в первом посте про bindgen написал. Я не знаю зачем ты выдумал шизу про биндинги раста на расте.

> кладёшь dll в корень


Т.е. без костылей никак?
275 3323775
>>23760

>Т.е. без костылей никак?


В смысле костыли. Все программы в истории Винды либо таскают свои либы, либо срут куда-то в system32 при установке. Ты же в любом случае будешь деплоить приложуху когда-то?
276 3324221
Вы на линуксе или на винде разрабатываете?
277 3324297
Microsoft отказывается от C# — ключевой компонент Microsoft 365 перепишут на Rust

Microsoft активно переписывает отдельные части своих программных продуктов на Rust — более производительной и безопасной альтернативе С#. Портал MSPowerUser заметил на сайте компании вакансию для главного архитектора ПО Microsoft 365: он возглавит новую команду специалистов, которые перепишут с C# на Rust серверный код облачной платформы.

Даже мплкософт отказались от своего поделия ака джаваклона лол.
278 3324367
>>24297
Нихуя ты быстрый, даже двух лет не прошло как ты протухшее говно притащил. Ещё и максимально жёлтое, где шизо-журнашлюхи одну вакансию растана приравняли к "майки переходят на раст".
279 3324455
>>24297
На тебя мочи не хватит.
>>3324454 →
280 3325107
Есть структуры Foo и Bar. Функция создает структуру Foo и возвращает ее. Результат выполнения этой функции (т.е. Foo) присваивается одному из полей структуры Bar (изначально там был Foo::default()).
Внимание вопрос: что конкретно присвоилось? Адрес в куче, адрес не стеке, где лежит адрес на кучу или Foo клониролоась, хотя явно .clone() не вызывался. Foo после создания может релоцироваться? Если до возврата из функции я буду делать поинтеры на Foo, это норм? Они будут жить после присваивания?
281 3325157
>>25107
Какой адрес на кучу, какие релокации структуры
Таблетки прими, шизик.

Тебе дали язык высокого уровня чтоб ты даже не пытался в это лезть, потому что когда такие как ты лезут в адреса стек, что вообще говоря выходит за рамки любого языка, происходит катастрофа как по части безопасности, так и по части переносимости и даже производительности.

Пиши как на скрипте и не лезь блять, дебилсукаебаный
282 3325159
>>25107
У тебя уже выделено место под Foo внутри Bar. Скорее всего компилятор просто будет писать в данную область нужные данные.

Другой вариант - выделится место в стекфрейме вызывающей функции, в которую потом запишутся данные от вызова, которые потом присвоятся по адрессу внутри Bar.

Естественно если возвращается Box<Foo>, то передатся указатель на выделенные данные в куче, который потом перезапишется по Bar и самоудалится
283 3325164
Вот пример выше - человек думает что это джава, стекфреймы блять, кучи, Foo выделяется внутри bar пиздец
284 3325172
>>25164
Таблетки не забыл? Причем тут джава?

Как только переменную определил, если без оптимизаций, компилятор тебе на стэке выделяет область памяти под размер переменной + выравнивание. В частности, как в примере, в области памяти выделенной под Bar есть область памяти под Foo.
285 3325194
>>25157
>>25159
два стула:

читаю файл
десериализацию в структуру Foo
на эту структуру хуярю поинтеры
структуру возвращаю из функции
Bar.foo = Foo

ИЛИ

читаю файл
десериализацию в структуру Foo
структуру возвращаю из функции
bar.foo = Foo
хуярю поинтеры уже на bar.foo

есть разница или вообще похуй, даже дверь открыта?
286 3325202
>>25194
или

собираешь портфель на завтра, готовишь уроки
287 3325205
>>25194
Как хранится Foo внутри Bar? Можешь вообще код использования кинуть?
Просто что ты делаешь в первом варике я не понял
288 3325217
>>25205

struct Foo{
bar: Bar;
}

struct x{
куча полей
}

fn load(x: &mut X) -> Bar{
let data = load_from_file();
X.имя_поля = data.as_mut_ptr();
}

где-то в майне:
экземпляр foo.bar = load(x);

ИЛИ

fn load(x: &mut X) -> Bar{
load_from_file()
}

где-то в майне:
экземпляр foo.bar = load(x);
X.имя_поля = foo.bar.as_mut_ptr();
}
288 3325217
>>25205

struct Foo{
bar: Bar;
}

struct x{
куча полей
}

fn load(x: &mut X) -> Bar{
let data = load_from_file();
X.имя_поля = data.as_mut_ptr();
}

где-то в майне:
экземпляр foo.bar = load(x);

ИЛИ

fn load(x: &mut X) -> Bar{
load_from_file()
}

где-то в майне:
экземпляр foo.bar = load(x);
X.имя_поля = foo.bar.as_mut_ptr();
}
289 3325220
>>25217
Один хуй
290 3325225
>>25220
так когда мы делаем foo.bar = load(x);, что конкретно присваивается?
291 3325254
>>25225
парик и смешной нос
image.png168 Кб, 443x515
292 3325258
>>25254
а парик твои друзья до сих пор не вернули
293 3326142
>>25225
так что конкретно присваивается: указатель на стек, где хранится указатель на кучу, сразу указатель на кучу или что-то еще? как это работает?

вот у нас есть структура, в ней поле, которое равно Foo::default()
потом мы создаем (читаем из файла) новый Foo (в функции)
возвращаем его из функции и присваиваем к полю структуру вместо Foo::default()
оно же никуда не релоцируется, правильно?
как это выглядит на более низком уровне?
294 3326152
>>26142
Низкий уровень это команды@регистры, причем конкретной машины/архитектуры а не любой, если тебе интересно залезть в низкий уровень сначала изучи литературу поро какую нибудь архитектуру и ее ситему комманд которыми она все это делает, и потом просто возьми скомпилируй и сделай обжект дамп программы и так ты увидишь как это все реализовано на низком уровне. В данном же случае ты себе придумал какую-то джава-хип-подобную хуйню и требуешь объяснения как это на ней работает.

Никак оно блять не работает, считай все компилируется просто в "сишную программу" и все.
295 3326156
>>26142
Для проца нет никакого стека или кучи, только память. Любой объект - это последовательность байт. Ты перемешаешь эти байты в конкретную локацию на памяти. Компилятор делает это статически, поэтому указателя никакого не создаётся, кроме указателя на стакфрейм (который, в свою очередь, тоже всего-лишь кучка байт). Кроме того, всё это дело может соптимайзиться, чтобы жить чисто в регистрах, но это детали.
296 3326334
>>26152

>В данном же случае ты себе придумал какую-то джава-хип-подобную хуйню и требуешь объяснения как это на ней работает.


понятие стека и кучи есть и в книжках про rust
я читал, что в стеке лежат примитивы и ссылки на кучу, в куче более сложные объекты
в стеке все фикс размера, а в куче выделяется и освобождается память и т.д.
стек маленький и быстрый, а куча большая и медленная
при обращении к объекту ищут его на стеке, а там уже берут адрес в куче

let v1 = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
println!("v1.as_ptr(): {:p}", v1.as_ptr());
println!("&v1: {:p}", &v1);
первое вернет адрес в куче, а второе на стеке

где я напиздел?
image.png81 Кб, 911x744
297 3326341
>>26334
добавлю
получается, что в foo.bar лежит адрес на стеке, где лежит адрес в куче?
298 3326358
>>26341
Vec<u8> - это примерно struct A { len : usize, capacity : usize, data : *mut u8 }.

В первом принте ты видишь адрес вектора на стеке, а во втором значение указателя data, который лежит внутри этого вектора.
299 3326375
>>26358
там даже не так, а как то вот так

text: {
0: "{:p}"
}

data: {
main: { 0: &vec foo.bar }
}

calls: {
main : {
0: Foo.new(&self[0]), // передаем адрес на стеке откуда начинаются данные структуры для инициализации
1: println(text[0], &self[0]), // печатаем этот адрес на стеке
2: println(text[0], self[0]) // печатаем то что лежит по адресу на стеке
3: return()
}
}

В любом случае это все условная абстракция которая перекладывается на реализацию конкретной архитектуры.
300 3328593
>>28587 (Del)
Вот это ровный чел, наш растан.
301 3329722
С приходом нейронок раст наконец перестаёт вызывать рвоту. С бойлерплейтом и построчным автокомплитом нейронка справляется без проблем, теперь не так бесит когда надо высерать десяток строк мусора. Вчера обёртку на сишную либу писал, почти всё нажатием таба сделал, изредка только руками приходилось пару слов написать.
302 3329746
>>29722

>теперь не так бесит когда надо высерать десяток строк мусора



Это где? Код на Расте раза в полтора короче тех же плюсов. И раз в десять короче, чем любой ООП язык.
303 3329754
>>29746

> Код на Расте раза в полтора короче тех же плюсов.


На крестах просто делаешь что хочешь, а на расте ебёшься с безопасностью и соответствием типов. Даже растовский match требует больше символов чем просто if else.

> раз в десять короче, чем любой ООП язык


В каком месте? В ООП языках не надо трейты отделять от структуры и реализовывать каждый трейт в отдельном блоке, не надо определять модули, не надо делать безопасные обёртки и обрабатывать каждый Result. Литералли только лямбды компактнее чем у других, всё остальное требует больше буков.
304 3329838
>>29754

>На крестах просто делаешь что хочешь



>Rule of 5


>Rule of 3


>каждый указатель может быть нулём, каждый объект может быть в невалидном состоянии, и их нужно в каждом месте проверять.



Да, охуенно. Это всё можно игнорировать, но так ты будешь как на минном поле, если на ревью не завалят.

>на расте ебёшься с безопасностью и соответствием типов


Если ты не собираешься нигде публиковать свою обёртку, ты можешь обернуть только самое ходовое, а остальное либо добавить потом, либо пользоваться через ряяя-ансейф.

>Даже растовский match требует больше символов чем просто if else.


Так он и делает больше, чем просто if/else. И все ветки матча может сгенерить раст аналайзер, даже нейросетка не нужна.

>В ООП языках не надо трейты отделять от структуры


Крестовый линкер передаёт привет (ну или добавляешь везде inline и собираешь любой проект длиннее 1000 строк по месяцу)

>реализовывать каждый трейт в отдельном блоке, не надо определять модули, не надо делать безопасные обёртки и обрабатывать каждый Result



Ну да, там надо делать иерархии абстрактной хуйни, энкапсулировать один тип хуйни в другой хуйне и прочее перекладывание бумажек. А потом окажется, что ты неправильно понял задачу и у твоей иерархии хуйни надо пробивать дырки в стенах. Зато трейты отдельно определять не надо.
305 3329862
>>29838

> как на минном поле


Никто не пишет на C++03.

> Так он и делает больше, чем просто if/else.


И что же он делает? Паттерн матчинг и в if бывает.

> Крестовый линкер передаёт привет


Кому он передаёт привет, уже третий стандарт с модулями сидим. Линкер наоборот передаст тебе привет если попробуешь реализацию шаблонов от определения отделить. Да и речь же не только про кресты, раз ты обобщаешь до ООП-языков.

> иерархии абстрактной хуйни


В расте их нет не от хорошей жизни, а от того что потом боров-чеккер не даст просто взять и поменять иерархию. Алсо, уёбищная реализация модулей раста, когда надо чтоб всё было в дереве проекта, а иначе раст-аналайзер отрубит подсветку синтаксиса - это пизда. Из-за этого потом городят костыли с mod-залупой. При том что у всех остальных достаточно просто определить модуль и он просто доступен во всём проекте, без выстраивания дерева от main/lib.
306 3329869
>>29862

> уже третий стандарт с модулями


И ни одного конпелятора не под венду пхахаха
307 3329878
>>29869
Сейчас бы пользоваться операционкой финского нацика. Пусть дальше сидят на gcc 12 и хоть на сишке пишут.
308 3329891
>>29862

>Никто не пишет на C++03.



А, там же теперь правило семи. Виноват, попутал.

>В расте их нет не от хорошей жизни, а от того что потом боров-чеккер не даст просто взять и поменять иерархию.



Плохо что ли? Хорошо. Ни разу не слышал, чтобы кто-то посмотрел на код и подумал "А вот бы в этот код заебенить пять тысяч строк абстрактных классов, которые делают ебаное ничего".

>Алсо, уёбищная реализация модулей раста, когда надо чтоб всё было в дереве проекта



Оформляешь как крейт и добавляешь по относительному пути. Без понятия, в чем твоя проблема.
309 3329900
>>29891

> Ни разу не слышал


Может ты ещё ни разу не слышал как сдыхают проекты на расте из-за невозможности рефакторить его? А были бы нормальные абстракции - рефакторили бы любое легаси.
310 3329928
>>29900

>Может ты ещё ни разу не слышал как сдыхают проекты на расте из-за невозможности рефакторить его?



Кроме той единственной истории от игродела, все наоборот дрочат на то, как легко им было отрефакторить код, при этом его не поломав к херам. И даже в той истории он не рефакторил, а наоборот пихал квадратное в круглое.

>А были бы нормальные абстракции - рефакторили бы любое легаси.


Абстракции есть. Неведомую херню сотворить сложнее.
311 3329935
>>29928

> Кроме той единственной истории от игродела


Посчитай хотя бы сколько обёрток на Вулкан на расте написано одними и теми же людьми. Или сколько раз wgpu переписывали. И уже потом рассказывай как это всего лишь один игродел, лол.
312 3329975
>>29935

>Посчитай хотя бы сколько обёрток на Вулкан на расте написано одними и теми же людьми. Или сколько раз wgpu переписывали



Они пишут абстракцию, ниже которой только драйвер. Базовый уровень. Естественно, что здесь каждый элемент должен быть на своём месте. ООП тут никак не поможет, только перед тем как ты поймешь, что написал херню, у тебя выйдет вдвое больше кода и ты больше заебешься.
313 3329982
>>29754
Нефига манямир, а волосы шелковистее?
314 3329986
>>29754

>Литералли только лямбды компактнее чем у других


Самые удобные лямбды в груви котлине и вытекающем оттуда dsl
Я не понимаю почему в новых экзотических языках обходят этот шикарный сахар.
315 3330011
>>29746
ООП позволяет инкапсулировать внутренние изменчивое поведение от потребителя API, в расте изменчивое состояние достигается только через костыли рантайма rc<refcell>>.
Так что ООП это не только про злое и пугающие зумеров наследование, это еще настоящая инкапсуляция внутренних изменений (в расте это недостижимо, а значит проекты больше grep будут превращаться жопоболь)

Мягкие хотели сделать свой раст с множественной мутацией, но закрыли эксперимент, увы (ну или это недостижимо)

ООП такая штука, она не всегда нужна полностью, но когда нужна, лучше когда она есть.
1651199670464.png143 Кб, 2047x767
316 3330109
Как в вс-коде дебажить? Почему у раста дебаг через питон ебучий сделан и нихуя не работает?
317 3330110
>>30011

> в расте изменчивое состояние достигается только через костыли рантайма rc<refcell>>.


Теплое с мягким перепутал
318 3330129
Пиздос, есть сишная либа, в крестах работает как часы. А в расте дёргаю функцию и через раз получаю: (exit code: 0xc0000374, STATUS_HEAP_CORRUPTION)
Кто мне в штаны насрал? Оно реально просто рандомно падает. Может 5 раз нормально вызваться, а потом 3 раза подряд упасть. На крестах гонял тесты час - всё ровно.
Алсо, самое поганое что отловить это невозможно никак, раст сразу в панику проваливается. Пробовал дебажить, кроме "Critical error detected c0000374" нихуя понятного.
319 3330142
>>30129
Можешь попробовать втроянить в свою либу обработчик sigsegv и напечатать стек вызовов. А исходники есть у тебя?
320 3330154
>>30110
Ты не можешь менять внутренние состояние если ты был создан через let. Это помогает барран-чекать, но просто множит на ноль инкапсуляцию и асбтракцию, а значит любое проектирование.

Простыми словами ты можешь создать машину которая не может завести двигатель, кофеварка, которая не греет, радио которое не может изменить частоту.
321 3330179
>>30154
Ага, а в плюсах ты не можешь менять состояние если const

Про ключевое слово mut что то слышал?
322 3330265
>>30179
const в си и плюсах это дополнительное объявление для типа переменной, а не для самой переменной.
Операторов объявления как таковых у них нет вообще. Раньше контроль преременных не считали проблемой, потому что раньше писали размашисто/увесисто типа:

function discursModeration
argument threadAbsoluteId type unsigned short int,
argument userUnicueId type unsigned long int,
argument trollFullWeight type fat64
returnvalue modVerdict type boolean
begin
if trollFullWeight == 10^99
then call zaBanitPidora with userUnicueId
then set modVerdict = true
else
then set modVerdict = false
end
end

наследие старых языков ориентированных на построчный ввод в терминале. Целые поколения в стенах университетов воспитаны объявлять dvernayaRuchkaN1 которую с локально объявленым xer -ом никак не спутаешь.

Но сегодня программирование доступно для широких народных масс, которые в большинстве своемуниверситетах не обучались (хорошо если хоть школу закончили я например нет), не привыкли много читать и писать и поэтому предпочитают более простой и короткий код:

фу блять() {
аа = "1"
ыыы = ээ_блэт()
пук val
}

но с уменьшением количества буков пришла и проблема пересечения переменных, пришлось изобретать принудительный контроль
322 3330265
>>30179
const в си и плюсах это дополнительное объявление для типа переменной, а не для самой переменной.
Операторов объявления как таковых у них нет вообще. Раньше контроль преременных не считали проблемой, потому что раньше писали размашисто/увесисто типа:

function discursModeration
argument threadAbsoluteId type unsigned short int,
argument userUnicueId type unsigned long int,
argument trollFullWeight type fat64
returnvalue modVerdict type boolean
begin
if trollFullWeight == 10^99
then call zaBanitPidora with userUnicueId
then set modVerdict = true
else
then set modVerdict = false
end
end

наследие старых языков ориентированных на построчный ввод в терминале. Целые поколения в стенах университетов воспитаны объявлять dvernayaRuchkaN1 которую с локально объявленым xer -ом никак не спутаешь.

Но сегодня программирование доступно для широких народных масс, которые в большинстве своемуниверситетах не обучались (хорошо если хоть школу закончили я например нет), не привыкли много читать и писать и поэтому предпочитают более простой и короткий код:

фу блять() {
аа = "1"
ыыы = ээ_блэт()
пук val
}

но с уменьшением количества буков пришла и проблема пересечения переменных, пришлось изобретать принудительный контроль
323 3330273
>>30265
Такую шизофрению могла только чатгпт выдать, какое отношение этот текст к моему ветке постов имеет?
324 3330284
>>30154
Словесный салат.
325 3330856

>>333017


>Про ключевое слово mut что то слышал?


Смешно, но проблемы появляются именно, когда начинаешь передавать везде mut (с его ограничением).
326 3331011
>>30856
добро пожаловать в программирование
тут все проблемы от мутабельности и сайд эффектов
327 3331539
>>31011
ФэПэшный манямир, напрочь оторванный от реальности (от чего фп и соснуло).
328 3331570
>>31539
то что фп не может решить эту проблему не значит что этой проблемы нет
329 3331604
>>30142
Исходники есть, там сишное ручное управление памятью и обращение к драйверу, где угодно может это происходить, максимальный ансейф. Как дебажать сишную либу, когда она в расте - не понятно. При этом у либы есть официальная обёртка под шарп и там она без проблем работает. Пробовал в расте делать вызовы функций без аргументов даже, если в цикле делать вызовы, то падает на 2-8 вызов, полный рандом. Раст каким-то образом подсерает в окружение или ломает память.
330 3331672
>>31604
Переписать семплы на сырых вызовах пробовал?
331 3331768
>>31539
Но фпшную хуйню проще верифицировать.
332 3331983
>>31672
В общем, если либу из исходников собрать свежим MSVC, то всё начинает работать. Пидорство. А ведь в шарпе и с гитхаба бинарник работает, хоть с AOT, хоть с JIT. В расте даже пробовал с libloading с ручным вызовом в рантайме и так же рандомно падает.
333 3332341
>>31983
МС пилит rustc под свой бэкенд. Тогда заживём.
334 3332513
>>32341
Даже пидорастеры уже llvm хуисосят, этож надо было так обосраться с ним
335 3332547
>>32513
Что за драма?

мимо говорил, лет 5 назад, что зависимость от чужого бэкенда зло и что говна пожрете
336 3332567
>>32513
А когда его не хуесосили? Помню ещё лет 10 назад финский нацик горел с багов llvm и то что его пердольный код не работает как надо с оптимизациями, приходится только на gcc собирать. А у растанов наоборот всегда llvm был как позитивная фича, типа оптимизацию за них сделали, они только язык пилят не волнуясь о скорости ассемблерного кода.
>>32341
Заживём когда Карбон допилят.
Обновить тред
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски

Скачать тред только с превьюс превью и прикрепленными файлами

Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах.Подробнее