Программирование


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
530 38 137

Rust #10 /rust/ Аноним 15/02/20 Суб 16:46:27 16029651
rust-logo.jpg (145Кб, 1280x720)
1280x720
real-rust.jpg (508Кб, 1600x1000)
1600x1000
rust-game.jpg (80Кб, 1280x720)
1280x720
dvach-02.webm (2422Кб, 1920x1056, 00:00:12)
1920x1056
Аноним 15/02/20 Суб 17:00:23 16029902
Чего-то тихо тут...
Аноним 15/02/20 Суб 17:05:25 16030013
>>1602990
Тут всегда тихо. Порог вхождения высокий, осиливших мало, срачей тоже мало.
Аноним 15/02/20 Суб 17:06:49 16030034
>>1603001
Зато те кто осилили, кайфуют.
Аноним 15/02/20 Суб 17:48:39 16030475
>>1602417 →
такое дело: vulkano как раз генерит шейдер из процедурного макроса, т.е. код шейдера должен быть известен ещё до конпеляции. А я хочу через темплейт нагенерить 100500 вариантов шейдеров и матчилку для их разруливания. Короч, решил заюзать markup + build.rs - пожелайте удачи, в-обсчем.
Аноним 15/02/20 Суб 18:29:24 16030976
что лучше не писать на расте?
Аноним 15/02/20 Суб 18:30:53 16031007
>>1603001
Просто у вас токсики-нацисты в сообществе. Последний случай с веб-сервером на расте и его выпиливанием с гитхаба весьма показательный пример для желающих вкатиться в ваше говно.
Аноним 15/02/20 Суб 18:31:51 16031018
>>1603097
> не писать
Всё, кроме
> Command Line
> WebAssembly
> Networking
> Embedded
Аноним 15/02/20 Суб 18:33:05 16031049
>>1603100
Так во всех небольших коммунити. Ненависть, желчь, недружелюбие к новичкам, сектантство.
Аноним 15/02/20 Суб 19:42:04 160319810
>>1602965 (OP)
>создавать надёжное
А почему в вашем самом быстром фреймворке ансейв на ансейве?
Аноним 15/02/20 Суб 19:45:33 160320111
>>1603198
Потому же, почему либы для питона пишут на сях.
Аноним 15/02/20 Суб 19:59:09 160322012
>>1603201
Почему бы не писать сразу на сях?
Аноним 15/02/20 Суб 20:01:07 160322313
>>1603220
Скажем я хочу хэш таблицу на сях, например, String -> Int. Сравним с питоном или растом?
Аноним 15/02/20 Суб 20:10:34 160324014
>>1603220
Ну так сишка сложная, там потратишь на разработку намного больше времени. А питон любая школьница осилит и решит прикладную задачу в десятки раз быстрее.
Аноним 15/02/20 Суб 20:18:17 160324615
>>1603223
Словарь в питоне есть из коробки. В сях хеш-таблицу придётся реализовывать с нуля, либо брать либы.
Аноним 15/02/20 Суб 20:24:22 160325416
Аноним 16/02/20 Вск 01:09:40 160345917
>>1603097
По опыту - совсем не подходит только для GUI (почти все фреймворки - говно, обвязки над qt/gtk - ещё хуже, да и как-то в целом язык, как кажется, не очень помогает), фронтенд (тащемта профитов мало, придется компилить в васм, ну нахуй, проще взять TS).

Ещё (довольно узкий) кейс - система плагинов в виде динамических библиотек. Если хочешь DLL с растовым интерфейсом (трейты/трейт объекты/не С типы данных), то соснешь хуйцов, так как супер сложно обеспечить совместимость потом будет.

В остальном для всего подходит, а с excvr можно даже как repl юзать.
Аноним 16/02/20 Вск 01:17:16 160346318
>>1603047
Есть Askama, как раз компилит шаблоны в compile-time. Для рантайма есть Tera. Оба по сути варианты Jinja2.

Сам сейчас на работе юзаю Askama, очень неплохая штука. Не уверен, насколько она подойдёт для шейдеров, но раз ты упомянул mako, то наверно тебе сойдёт.
Аноним 16/02/20 Вск 18:05:24 160406219
Чего бы такого запилить жизненеобходимогодля раста? Предлагайте идеи что-ли.
Аноним 16/02/20 Вск 18:15:20 160406920
>>1604062
Допилить существующие библиотеки для гуя (подчёркиваю: допилить, а не создать ещё одну).
Аноним 16/02/20 Вск 18:49:14 160412921
Как так выходит, что молодой язык созданный хипстерами даёт пасасать в половине случаев сишке, компилятор для который уже несколько десятилетий полируется суровыми асамблерными дедами
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/rust.html
Аноним 16/02/20 Вск 18:59:11 160414622
>>1604129
А в некоторых не даёт. Удивительно, да?

Есть мнение, что по перформансу оба языка находятся у предела для высокоуровневых языков. А перегибы в ту или иную сторону - лишь следствие особенностей реализации оптимизаторов.
Аноним 17/02/20 Пнд 01:10:59 160472923
>>1604069

Было бы круто, но даже если все двачеры знающие Раст соберутся, путного ничего не выйдет. Слишком сложно.
Аноним 17/02/20 Пнд 11:56:09 160501024
>>1604062
Запили поддержку 16-бит png для image и/или 12/16-бит жипега для него же. Вообще, под раст худо-бедно либы есть, но многие из них страдают дефицитом функциональности.
Аноним 17/02/20 Пнд 19:08:30 160552325
15723764211580.jpg (74Кб, 1024x962)
1024x962
Я долбаеб
Аноним 17/02/20 Пнд 19:10:34 160552526
Аноним 17/02/20 Пнд 23:01:59 160589227
А где посмотреть бенчмарки раста?
Я тут подумал, что широко известные ничего не показывают, кроме знаний авторов о железе и внутренностях раста.

А такой, который бы показал перфоманс идиоматического кода на расте (без строчки unsafe), плюсов, джавы etc.
Аноним 18/02/20 Втр 13:16:12 160635028
Пиздец.
Обычный клиент Postgres не работает, если программа использует async.
Причем падает с Runtime ошибкой
>Cannot start a runtime from within a runtime.
Ну заебись.
Пошел переписывать на tokio-postgres
Аноним 19/02/20 Срд 20:19:08 160816629
Аноним 19/02/20 Срд 22:01:45 160838630
>>1602965 (OP)
На удаленках выгорел и по итогу нет ни одного проекта нормального проекта для портфолио как и самого портфолио
В реале идти устраиваться не вариант

Где найти силы?? морально хочу начать сосать писюны и сидеть на каком-нибудь винте или герыче нет сил
Аноним 19/02/20 Срд 22:09:41 160840731
>>1608386
Никогда не понимал, что такое "портфолио" кроме как для фронтенда или мобилок.
Аноним 19/02/20 Срд 22:21:40 160842832
>>1608386
>На удаленках выгорел
>Где найти силы??
Знакомые симптомы. Меняй режим работы.
Сразу говорю мотвация, накачивания себя и прочие психологические штучки тут не помогают.
Что мне помогло:
- Никакого кода после 9-00: Код выходит говно, усталость накапливается, мораль падает.
- Я полностью отказался от кофе в пользу яблок. Кофе дает бодрость не бесплатно, а в долг и требует потом проценты. От яблок тот же эффект, но больше пользы.
- Я встаю в 6:00 каждый день , но это по желанию.
- Ходять в качалку я не стал, купил гирю на 16. Мне достаточно в день делать 1 упражнеие - 10х10 махов гирей. Мышцы перестали атрофироваться и осанка несколько исправлась. Плюс вернулся аппетит.

Аноним 20/02/20 Чтв 07:52:42 160874733
>>1608428
>Никакого кода после 9-00
утра или вечера?

>в пользу яблок
мне помело помогает, которое фрукт. Адово бодрит

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

не тот анон, но тоже удалёнщик. хуячу приложение камеры на расте.
Аноним 20/02/20 Чтв 08:02:13 160874834
Вдогонку: кого бессонница не мучает - попробуйте пить зелёный чай. Я развожу из концентрата (взял на ебее за недорого), бодрит по-доброму - т.е. руки не трясутся, как от кофе. Но меня бодрит настолько, что я ложусь на 2 часа позже, чем следовало бы.
Аноним 20/02/20 Чтв 09:13:43 160878235
>>1608747
>>Никакого кода после 9-00
>утра или вечера?
Вечера, понятное дело.
Я за ~15 лет работы в IT видел много примеров "ночного" кода.
Собственного, вендорсокого, кода джуниоров, синьеров, тим лидов.
Что весь этот код объединяло - он всегда был говно.


Аноним 20/02/20 Чтв 16:05:57 160917036
1.png (38Кб, 256x256)
256x256
>the maintainer of a popular Rust library (Actix Web), under heavy criticism (some might call it hate), decided to stop maintaining it and quit open source development.
Аноним 20/02/20 Чтв 19:14:58 160930037
gslow.gif (1209Кб, 288x288)
288x288
Аноним 20/02/20 Чтв 21:16:40 160949038
>>1605892
>А где посмотреть бенчмарки раста?
Это немного странный вопрос, потому что сам раст позволяет тебе писать код сколь угодно близкий к железу. Может быть ты хочешь посмотреть производительность stdlib?
Или может ты хочешь узнать как быстро работают программы написанные для синтетических задач? Тогда вот: https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/rust.html
Или для конкретных реальных задач: https://blog.burntsushi.net/ripgrep/ https://github.com/serde-rs/json-benchmark https://github.com/tafia/quick-xml

>Я тут подумал, что широко известные ничего не показывают, кроме знаний авторов о железе и внутренностях раста.
Если ты хочешь делать бенчмарк на любом языке для любой задачи, тебе обязательно придется знать железо и внутренности языка. (в случае с Си этих "внутренностей" намного меньше чем в других языках, и вопрос ближе к железу)
>А такой, который бы показал перфоманс идиоматического кода на расте (без строчки unsafe), плюсов, джавы etc.
Я думаю вот это очень полезно: http://cliffle.com/p/dangerust/
Аноним 20/02/20 Чтв 22:08:25 160958939
>>1609490
Я вот никогда во внутренности актикса не заглядывал, но вот вспыхнул скандал, и я солидарен, что там по, ансейф ансейфом погоняет.
И как бы оно может упасть в любой момент, никакие гарантии, за что я полюбил Раст не работают.
Аноним 20/02/20 Чтв 22:50:41 160963740
>>1609589
> ансейф ансейфом погоняет
Вообще-то нет.
Аноним 20/02/20 Чтв 22:52:41 160964041
1548268401410.jpg (6Кб, 300x168)
300x168
>>1609589
И скандал не из-за количества ансейфа, а из-за одного вполне конкретного.
Аноним 21/02/20 Птн 14:16:45 161020742
>>1609637
Там ансейф в одной функции, которая, вообще-то, тоже должна быть ансейф, и из-за этого кажется, что его мало.
Аноним 21/02/20 Птн 14:42:30 161023043
Аноним 21/02/20 Птн 23:14:11 161083044
>>1610207
У вектора из стд внутри тоже попадается ансейф.
Аноним 22/02/20 Суб 08:42:58 161113145
Выделение021.png (66Кб, 755x590)
755x590
>>1610830
Одно дело, когда у тебя в ансейфе 22 = 4, а другое, когда 2x = 4, где х - а хуй его знает, скорее всего тоже 2.

У меня, кстати, в приложухе джля ведроида полно подобных ансейф преобразований, без которых никак, ибо коллбэки. Приходится в RefCell оборачивать и пикрил хуетой пользоваться (кстати, мож кто знает - есть ли подобное в стандартной либе?)
Аноним 22/02/20 Суб 16:50:51 161152846
>>1611131
> пикрил хуетой пользоваться
Может лучше RWLock возьмёшь из крейта parking_lot? Методы try_read_for и try_write_for. RefCell как бы не предназначен для многопоточных приложений.
Аноним 22/02/20 Суб 19:29:03 161171247
Аноним 22/02/20 Суб 20:20:59 161175448
Аноним 22/02/20 Суб 20:30:16 161176949
>>1611712
> Хотя можно и мой костыль под дефолтный RWLock переписать - его тоже нагуглил.
Твой костыль очень хуёв в плане производительности и задержки. Мало того что идёт переключение контекста каждый раз при засыпании треда, так и при освобождении ресурса функция может возвратить результат не сразу. RwLock со встроенными таймаутами в разы лучше. В std поддержки таймаутов в RwLock'е нету, но если захочешь добавить в любом случае будешь изобретать похожий велосипед. Лучше возьми готовое.
Аноним 22/02/20 Суб 20:38:12 161178450
>>1611769
Ах, да. Чуть не забыл. У тебя напрочь отсутствует fairness. Что значит если непрерывно идёт много читателей, то поток на запись просто может быть навсегда заблокирован.
Аноним 22/02/20 Суб 20:39:54 161179051
>>1611784
Точнее не навсегда - у тебя ж таймауты. Но запись просто никогда не будет успешной.
Аноним 22/02/20 Суб 20:46:36 161180652
>>1611769
Спасибо, боярин, и правда пошустрее стало (вроде). Не то, чтобы оно особо тормозило, но на обработке очереди 4 тыка по 5 raw снимков в серии ощутимо лагало - сейчас немного лагает.
Аноним 23/02/20 Вск 13:49:46 161242453
1295058475455.jpg (172Кб, 504x653)
504x653
Сап, есть такая задача. Надо будет из json-ов, xml-ев или любого другого формата данных извлекать допустим что-то подобное:
{
"componentName" : "position",
"value1" : "i32",
"value2" : "i32",
"value3" : "i32"
}

Далее мы должны создать по образу и подобию блять структуру статического размера, а потом грамотно уложить её в массив, чтобы его не распидорасило по всему heap'у.
Если бы это делалось сразу в коде, то ничего сложного, просто объявляем структуру с полями value1..3 и всё. Но проблема в том что я не знаю как это сделать всё в рантайме. То есть мне надо в рантайме создавать типы определённых компонентов, и потом соотвественно эти компоненты заполнять. Там будут лежать только фиксированные по размеру инты всякие, или же ссылки которые ведут уже в кучу (но они относительно не так часто будут использоваться).

Надеюсь я понятно пояснил.
Аноним 23/02/20 Вск 14:30:22 161249954
>>1612424
что мешает все запихнуть в HashMap и сериализовать?
Аноним 23/02/20 Вск 15:10:28 161253755
image.png (18Кб, 799x219)
799x219
>>1612499
Ну я думал над чем-то подобным, но мне показалось что мой пример какой-то всратый и потенциально проблемный. Что можно просто взять, объявить одну структуру допустим, которой мы просто укажем внутреннему массиву размер исходя из того сколько в этом типе все совокупно байт будет (ну допустим на 3 i32 у нас уходит 96 байт.), а также создадим "дешифровку" этих байтов (Передаётся коду который будет работать с определённым типом компонентов). Потом создадим экземпляр как ты сказал хэшмап или чего-нибудь пошустее (динамический массив тут норм будет.) и запихивать уже эти экземпляры.
У меня тут просто возникает вопрос, как это всё дело будет укладываться в памяти, потому что с этими компонентами будет очень много тяжёлых операций, и это может обосрать всю производительность. В идеале конечно чтобы было вот так как на пикрелейтеде. Ну то есть чтобы они прямо вот так штабелями нахуячены были прямо в памяти. L1 кэш, все дела...

Извините за такие ебанутые вопросы, просто я совершенно не знаю во что там и как Раст превращает процессы укладки данных в памяти.
Алсо ХэшМэпы не шибко медленные?
Аноним 23/02/20 Вск 15:18:04 161254556
waaaaait.jpg (37Кб, 317x392)
317x392
Аноним 23/02/20 Вск 15:33:48 161256957
>>1612545
Да ну чего ты, ну. Не обращай внимания на то как я выражаюсь, а на то что донести хочу.
Аноним 23/02/20 Вск 17:11:08 161269358
>>1612537
Такой структуры в расте по-моему нету. Есть только tagged enum, но там каждый элемент будет иметь размер самого большого элемента. Нужно городить самому с ансейфами, вот кое-что сделал (только не гарантирую, что всё сделал правильно и там нет UB): https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=0797858ab4cc20d8a42cc8669b81d2d9

Новый размер массива вычисляется так:
let new_size = self.bytes_size + size * 3;
т.е. берётся размер добавляемого элемента и умножается на 3. Можно изменить по своему вкусу.

Но есть несколько недостатков:
1) Из-за отсутствия стабильного const-модификатора, приходится при каждом вызове вычислять Layout::new для TypeId и usize. Можно исправить с помощью lazy_static.
2) Раст не гарантирует отсутствие коллизий для TypeId (что на самом деле пиздец тот ещё). Можно вместо него использовать свои хеши, вычисляемые в компил-тайме и в которых гарантированно отсутствуют коллизии.
3) Из-за отсутствия стабильных unsized rvalue, в таком контейнере лучше не хранить элементы с деструктором. Либо он будет вызван сразу после добавления в контейнер, либо не будет вызван никогда (как сейчас). Не решается никак, лол. Впрочем даже с unsized rvalues если не выполнить итерацию по всем объектам, то деструктор не-итерированных объектов не будет вызван (по идее решается стабильным ABI и апкастом в трейты, но такого даже в планах нету).

Аноним 23/02/20 Вск 18:08:48 161279459
>>1612693
Ну спасибо, буду разбираться. Вообще я просто хочу попытаться создать годную реализацию ECS с возможностью создания систем и компонентов в рантайме.
https://en.wikipedia.org/wiki/Entity_component_system

В общем подумаю ещё как это можно без ансейфа сделать хитро. Кстати не вдуплил зачем он на 3 умножается.
Аноним 23/02/20 Вск 18:15:45 161280360
>>1612569
Так нихуя непонятно же.
Аноним 23/02/20 Вск 18:16:18 161280461
Аноним 23/02/20 Вск 18:21:48 161281062
>>1612537
Ещё можешь через кодогенерацию нагенерить все возможные типы, задать для них хранилища в главной структуре и матчилки в методах для складирования/извлечения.
Т.е., берёшь какой-нить темплейтный движок, пишешь кодогенератор, присобачиваешь это всё к build.rs и вперде.
Аноним 23/02/20 Вск 18:34:12 161281863
>>1612810
Ну и идея конечно. А можно просто создать одну структуру, внутрь засунуть ей просто массив байтовый, или может другой метод хранения нетипизированной информации, (допустим у нас будет 256 байт максимум для каждого компонента), а уже потом в него кастить инты всякие, или ссылки допустим превращать в байты. Но вопрос встанет - какие вообще будут расходы на чтение и редактирование по сути своеобразных POD из этой структуры.

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

>>1612803
Ну извини, не умею внятно объяснять другим людям наверное.



Аноним 23/02/20 Вск 19:38:49 161288664
>>1612794
> Кстати не вдуплил зачем он на 3 умножается.
Просто так. Чтобы не вызывать realloc при каждом добавлении элемента. Я ж сказал, что тюнить надо под задачу. Тут в отличии от стандартного Vec'a нельзя предсказать размер последующих данных.
>>1612818
> именно в рантайме новые типы создавать
Такого в расте не будет. Максимум будет как работа с нетипизированными данными функциями уровня `read_u32(&mut self, is_be: bool) -> Option<u32>` и проверочкой после каждого чтения. Разве что в расте можно обойтись без копирования данных, оставляя в структуре ссылки на слайсы с байтами. А вообще мне кажется ты что-то делаешь не так. Неужели нельзя каждый компонент описать до компиляции и всю ёблю с десериализацией оставить тому же serde?
Аноним 23/02/20 Вск 19:50:19 161290565
>>1612886
Возможно всё-таки придётся создать все компоненты непосредственно самим кодом, оставив просто фичу-возможность с помощью жсонов использовать какие-нибудь заранее слепленные-шаблонные компоненты, которые уже просто своими заплоняешь данными и вписываешь ему id. Нда, вроде задача не то чтобы сложная, в голове-то блядь решение представить можно, а язык не позволит такие кульбиты вытворять. Вот так пиздос конечно. Но всё равно спасибо аз помощь.

>нельзя предсказать размер последующих данных.
НУ вообще предполагалось что типы копонентов инициализируются 1 раз (под инициализацией понимается сборка самих полей, считка того сколько получилось памяти, сохранение где нибудь инструкций как это расшифровать, и собственно создание самого vec под этот тип компонента), и после инициализации они по-сути свой размер и поля право менять и имеют.
Аноним 23/02/20 Вск 20:08:52 161292166
>>1612905
Тебя просто сложно понять. Ты хочешь жсоном декларативно описывать компоненты, так? Но что ты с ними собираешься делать? Как-то их преобразовывать? А описание преобразования тоже будешь описывать в жсон-файле с компонентом? Тебе тогда тут целый интерпретатор твоего жсона надо будет делать. И раст тут не при чём, ты ни в каком языке подобное не сделаешь, чтоб работать с незнамо какими данными.
> собственно создание самого vec под этот тип компонента
Так у тебя в массиве будет храниться один тип компонента. Я-то думал ты в массиве хочешь хранить разные компоненты и потому нагородил свой костыль, который позволяет складировать в себя разные типы (сохраняя их в TLV-виде), а потом их динамически преобразовывать при чтении обратно.
Аноним 23/02/20 Вск 20:15:29 161293367
>>1612818
> именно в рантайме новые типы создавать
В чем сложность? Все компоненты заранее известны, собрать произвольную энтити на основе жсона нет никаких проблем.
Аноним 23/02/20 Вск 20:27:19 161294768
>Тебя просто сложно понять.
Да я сейчас со стороны посмотрел и подумал что я и правда какой-то поток сознания вывалил. Следующий раз постараюсь более последовательно задачу расписывать.

>>1612921
>о что ты с ними собираешься делать? Как-то их преобразовывать?
Только создавать экземпляры типа и помещать в массив.

>Так у тебя в массиве будет храниться один тип компонента.
Да, для каждого типа будет создавать отдельный vec. То есть внутри этого массива они будут одинаковы. Давай опрпобую ещё раз.
Есть тип компонента, он допустим магическим образом определяется в рантайме, и для этого типа также создаётся vec-массив. Для каждого типа компонента массив свой.
После того как тип компонента создан, его поля изменять нельзя, а можно менять только значения этих полей.

>>1612933
В том то и дело что я намерился создать расширяемый за счёт скриптовых языков и таблиц данных (LuaJit, Json, TOML) движок. То есть возможно создавать компоненты и системы в рантайме.


Аноним 23/02/20 Вск 20:29:45 161295669
Выделение024.png (7Кб, 210x125)
210x125
>>1612921
Он хочет, чтобы оно у него хранилось ровно разложенным по полочкам. Вот только размер полочек, как и размер хранимых данных ему заранее неизвестен. Вот, он думает, ща как создаст структуру в рантайме с в рантайме вычесленным размером, как начнёт её складировать в заранее отведённый вектор (?), так благодать на него и польётся.

Т.е, его вопрос больше про оптимизацию. Чисто технически, полагаю, у него отработало и что-то вроде того, что на пике.

Даже подозреваю, что решение его задачи всё-таки есть в каком-то крейте.
Аноним 23/02/20 Вск 20:38:04 161296870
>>1612956
Не совсем так конечно, подразумевается что эти структуры будут не векторы хранить со стандартными а сами будут в векторе, и хранить эти типы как обычно. Ну видимо я и правда идиотскую задачу задал не знаю.

>заранее отведённый вектор
Имеется ввиду что для каждого вида компонента свой будет вектор. и создаваться он будет как раз на инициализации видов компонентов создаваться и определяться.
Аноним 23/02/20 Вск 20:39:21 161297271
>>1612947
> Только создавать экземпляры типа и помещать в массив.
Ты не можешь создавать экземпляр того, что не существует на момент компиляции. Что мешает сохранять чисто данные? Создай хэш-карту HashMap<TypeTag, Vec<u8>> и в массив сохраняй в виде `длина,данные`. Где длина - фиксированный размер в байтах, а данные - непосредственно байты. А преобразование туда/сюда уже делай на уровне FFI хоть на расте, хоть на луе.
Аноним 23/02/20 Вск 20:47:20 161298172
>>1612972
> в виде `длина,данные`
Впрочем если длина фиксирована, то её можно и не сохранять в массиве, а хранить непосредственно в тэге. Т.е. в массиве будут чисто данные друг за дружкой, а вот сами поля данных уже можно упаковать через TLV (тип,длина,данные), тип и данные будут идти через FFI языку и там уже преобразовываться в нужную структуру.
Аноним 23/02/20 Вск 20:47:36 161298273
>>1612972
Во! Действительно годное решение, наконец-то. Нижайший поклон. К слову, а поиск в этих хэшмапах и преобразования туда/сюда, много ли с них накладных расходов будет? Потому что чтение этих компонентов нужно будет делать быстро-быстро блядь.
Аноним 23/02/20 Вск 20:48:11 161298374
>>1612981
Да, это годное решение. Спасибо.
Аноним 23/02/20 Вск 20:52:05 161298575
>>1612982
Ну если совсем беспокоишься о производительности, то можно вместо хэш-мапа использовать тот же вектор (или массив фиксированного размера) просто создать глобальный счётчик и при создании новых данных добавлять в глобальный вектор данных новый пустой вектор с компонентами (который и будет по адресу счётчика) и сохранять счётчик в самом теге, который и использовать для нахождения данных. Создания нового компонента станет медленней, а вот доступ быстрее.
Аноним 23/02/20 Вск 20:53:17 161298776
>>1612985
> Создания нового типа компонента станет медленней
fix
Аноним 23/02/20 Вск 20:56:44 161298977
>>1612985
>доступ быстрее
Доступ это процесс чтения/записи?
Если да - то так и следует сделать.

>>1612987
Это вообще пустяк, они создаваться будут только на запуске программы, а вот читаться/записываться сами компоненты будут очень часто.
Аноним 23/02/20 Вск 20:57:11 161299078
>>1612985
И да, вектор в этом плане скорее всего совсем не подойдёт, ведь его придётся упаковывать в RwLock, плюс он может реаллоцировать а значит создание нового типа будет тормозить чтение любого компонента.
Аноним 23/02/20 Вск 20:57:26 161299179
Я чето даже не понял, зачем сюда куда-то сувать хешмап
Аноним 23/02/20 Вск 21:02:22 161299580
>>1612990
Ну опять же, если типы будут создаваться только в 1 момент программы (на запуске), будет ли это проблемой? Сначала создали типы компонентов, потом заполнили экземплянами этих типов, а потом ебись оно всё в рот.
Тогда и реаллокации не будет, я правильно понимаю?
Аноним 23/02/20 Вск 21:03:36 161299881
>>1612989
> они создаваться будут только на запуске программы
Тогда вектор будет идеален, да. Доступ фактически будет только O(1) на поиск контейнера типов. А как ты собираешься доставать данные? По индексу? Будешь ли ты их удалять? Преобразование в основном упирается в порядок байтов. Впрочем если луа использует машинный endianness, то для преобразования четырёх u8 в u32 достаточно вызвать mem::transmute (который вообще ничего не делает в рантайме) и просто сказать расту что это ссылка не на четыре байта, а на один u32.
Аноним 23/02/20 Вск 21:10:11 161300282
>>1612998
> А как ты собираешься доставать данные?
И, кстати, что насчёт многопоточности? Я бы задумывался об оптимизации фрагментации памяти уже после оптимизации доступа из разных потоков. Потому что первое увеличит потребление памяти, а второе уже может дать значительные лаги.
Аноним 23/02/20 Вск 21:10:13 161300383
>>1612998
>А как ты собираешься доставать данные?
По индексу, да.
>Будешь ли ты их удалять?
Буду, ну из можно просто освобождать если что, допустим создав в менеджере вектор свободных индексов.

>Преобразование в основном упирается в порядок байтов.
Тут будет только преобразование байтов в их формат который и имела информация до превращения в байты. А, ну ещё адреса указателей или что-то подобное. ПОтому что нужно будет в компоненты ещё строки пихать, или массивы (допустим компонент storage, который хранит массив id ентити.)
Аноним 26/02/20 Срд 10:22:58 161522784
>>1612981
Это же переизобретение енума, лол.
Аноним 26/02/20 Срд 10:59:21 161524785
>>1615227
Не совсем. У tagged union все типы должны быть известны на момент компиляции, в TLV-формате можно хранить типы, создаваемые в рантайме.
Аноним 27/02/20 Чтв 20:55:14 161744886
>>1604146
Так-то, раст может быть еще шустрее. Если баги LLVM'a ссаного пофиксят.
Аноним 28/02/20 Птн 05:44:55 161771687
Человеки, есть ли у кого какая-нибудь краткая памятка (желательно инфографическая, тобишь картинкой) по всем основным аспектам языка?

Я нигде сам не нашёл, поэтому спросил тут, может кто видел-знает. Если такой вообще не ведётся, наверное придётся делать самому
Аноним 28/02/20 Птн 11:55:50 161784988
>>1617716
Просто я в обучении часто люблю диаграммки простые составлять, как бы деконструировать по небольшим и легко понимаемым-запоминаемым примитивам одну тему. Предполагаю что подобного врятли можно найти в Rust, поэтому думаю - может и самому попробовать составить. Там будет всё по темам и зависимостям. Допустим Операторы и выражения, Типы данных и функции, визуальное отображение того как зависимость можно работать, краткое описание основных STD и прочие вещи. Эта памятка не будет на полноту информации претендовать, но я считаю что для того чтобы что-то быстро вспомнить или просто систематизировать начинающим инфу будет самое то. Но я пока сам только изучаю, поэтому мне интересно что вы скажете и чего добавите. Через некоторое время как мне инфы или идей накидают (или не накидают, кто знает) я начну делать её.
Аноним 28/02/20 Птн 16:36:18 161809589
Ржавичи, ку
Почему раст не взлетает? И когда взлетит по-вашему? ЯП-то годный в плане концепции. Представьте себе мир без уязвимостей на низком уровне - это же просто охуенно. Бтв, даже если в ансейфе есть переполнение, его очень трудно эксплуатировать, так как лэйаут памяти программы не позволяет это сделать также, как в прогах, написанных на си и крестах. На мой взгляд, через лет 10-15 весь лоу лвл будет порабощен растом, целый пласт низкоуровневой безопасности канет в небытие и станет частью истории. Ну а Си и кресты уйдут на заслуженный отдых, языки явно несовременные и свое они уже отжили.
Аноним 28/02/20 Птн 16:42:24 161810090
>>1618095
>у а Си и кресты уйдут на заслуженный отдых, языки явно несовременные
Перетолстил.
Аноним 28/02/20 Птн 17:06:26 161812191
>>1618100
Клянусь всем чем можно, что я не троллю. Но я не понимаю почему эти языки нельзя считать несовременными?
Они держут высокий рейтинг в TIOBE только по одной причине - на этих япах написано ОХУЕТЬ как много легаси программ. Просто О Х У Е Т Ь как много. Но эти языки имеют проблемы, причем серьезные. Кресты набрали кучу стандартов и сейчас в мире есть только несколько людей, которые реально могут сказать, что они ЗНАЮТ кресты. И это разработчики известных компилятором для крестов. Все. Остальные кресты не знают, их НИКТО не знает. Си - вообще отдельная история. Этот язык - сама по себе уязвимость.
Почему раст, имея бинарную неуявимость (хорошо отдебаженный код на расте практически невозможно взломать, только если будут логические ошибки, которые найти ОЧЕНЬ трудно, ошибки работы с памятью, которые детектятся санитайзерами и фаззерами, идут лесом), не может заменить их в нише лоу левела? Напишут пару ОС на расте, они наберут популярность и все.
Аноним 28/02/20 Птн 17:08:02 161812292
>>1618121
компиляторов
неуязвимость

быстрофикс
Аноним 28/02/20 Птн 18:26:23 161819293
iXFnO32D5Lc.jpg (202Кб, 1043x581)
1043x581
>>1618121
Имхо люто играет синдром утёнка. Но при этом востребованность всё таки формируют бизнез компании, а им пока что далеко не всем есть что в расте ловить. Годных либ раз-два и обчёлся, а те что есть написаны с использованием того же ансейфа (ну не могут люди просто так изменить своё мышление и перейти с байтоёбства на более общие архитектурные решения или методы)
Конечно это только моё мнение, самому интересно как чзцк будет развиваться.
Но опять же не стоит забывать про его сложность. Я вот только сейчас вкатываюсь и понимаю что материалов которые бы конкретно и поэтапно подавали инфу нету. Тех двух книжечек явно недостаточно потому что я читаю и у меня глаза на лоб лезут нахуй от того как автор вроде рассказывал сначала про типы данных а потом залез в макросы и модули при этом ничего не пояснив, мол смотри читатель блядь как я умею. Понятное дело что там одно за другое цепляется, но блять, без нормального разделения и структурирования такой язык как раст проглотить будет ебейше тяжело.
>>1617849
Тут я к слову описал что хочу сделать. Думаю такой метод подачи не только мне зайдет.
Аноним 28/02/20 Птн 18:36:23 161819894
>>1618192
Можно сразу начать с того чтобы описать основой синтаксис и как и почему блять скобочки точечки эти нахуй выставляются, почему где то используются круглые, а где то <>. И всё это без описания самой std поначалу. Чтобы какая-нибудь хуйня типо Box<[Option<mut Container>]> не погружала неофитов с тантрум, а была вполне хотя бы относительно понятна что тут с чем пытается что сделать.
Аноним 28/02/20 Птн 18:45:26 161820495
Аноним 28/02/20 Птн 18:49:16 161820796
>>1618204
О, благодарю! Вот из этого можно памяток наделать. Хотя возможно всё равно придётся как-то систематизировать всё это дело
Аноним 28/02/20 Птн 19:28:22 161823097
>>1618198
ide используй. Там оно подсвечивается и автовыводится.
Вообще, скобочки и точечки не самое сложное в расте. Я, например, долго привыкал к тому, что нельзя просто взять и вернуть указатель (&), даже если ты сам результат получил уже в виде указателя. А потом, чё-т, раз и привык.
Аноним 28/02/20 Птн 19:43:09 161824598
>>1618230
Ну ты смотри на сложность которая вызывается от привычки (индивидуальная для каждого) и сложность которая вызывается от самой комплексности какой-либо вещи. Если в Расте очень много пересечения функционала и возможностей (как собственно и должно быть не спорю, но на понимание языка это влияет сильно), то это дико замедляет процесс понимания, потому что башка на плечах не в состоянии всё это дело грамотно распутать и разбить на удобоваримые кусочки-концепции. И вот тут у меня взорвалась жопа. Сейчас пока разберусь сам насколько смогу, потом надо реально подумать над тем как это всё дело переварить и высрать в виде понятном.
Аноним 28/02/20 Птн 20:03:29 161826399
>>1618245
Поставь ide и сразу пиши, не еби мозг. Я поначалу пытался через vim с одной только подсветкой его освоить - знатно охуевал. Потом накатил-таки идейку и процесс пошёл.
Подозреваю, что и ты также мучаешься.
Аноним 28/02/20 Птн 20:06:23 1618269100
>>1617448
А может и не быть. Если не пофиксят.
Аноним 28/02/20 Птн 20:40:58 1618308101
>>1618263
Что сразу "не еби мозг"? Будто тебе лишний раз боязно разобраться более фундаментально в том что ты делаешь (или просто дед который не чует муки нюфань уже). VS Code вместе с дебаггером ЛЛВМ я давно установил уже, но я хочу сразу заложить базу понимания какбе.
Аноним 28/02/20 Птн 20:59:39 1618337102
>>1618192
>Тех двух книжечек явно недостаточно потому что я читаю и у меня глаза на лоб лезут нахуй от того как автор вроде рассказывал сначала про типы данных а потом залез в макросы и модули при этом ничего не пояснив, мол смотри читатель блядь как я умею.
Два чаю. Чуть не обосрался, пока не понял, как работает хендлинг ошибок с помощью комбинаторов в rust-by-example.
Энивей, после 3 лет пердолинга в плюсах, лично для меня раст - это охуеннейший язык.
Аноним 29/02/20 Суб 04:00:48 1618558103
Вкатываюсь в раст после многих лет байтоебства на Си, по большей части работа с пердоликсом
Изучаю книгу Программирование на языке Rust от O'Reilly
Будут советы, кроме очевидного, что раст не нужен и денег мне не принесет. Я для развития как личности
Аноним 29/02/20 Суб 04:02:39 1618559104
>>1618558
Бля, sed -r "s#принесет\.#принесет\?#"
Аноним 29/02/20 Суб 05:03:53 1618573105
>>1618337
Вообще как я понял основная суть Раста в том, что он пытается занять нишу крестов, но при этом сам подход к разработке ПО довольно сильно отличается от плюсов, это надо понимать. Потому что я уверен что первое время (а может и второе) раст смогут осилить только как раз крестовики, и притащут туда свои знания и методы работы, превратя код в клубок ансейфа и попыток в наследование лол. Я конечно сам пока в процессе постижения, но уже явно видно что у Раста другой путь решения задач. Часто придётся пересматривать саму постановку задачи и методы её выполнения, чем начинать писать костыльный и небезопасный код, что по привычке C/С++ очень даже поощрял (неопределённым поведением, ага.)
Аноним 29/02/20 Суб 05:05:21 1618575106
-183.png (197Кб, 400x617)
400x617
>>1618558
Если хочешь писать нормальный код на Rust, идею байтоёбства желательно погасить, потому что она будет постоянно подталкивать тебя на нарушение правил, и весь основной сок безопасности в Rust просто будет невилирован
Аноним 29/02/20 Суб 08:11:20 1618596107
>>1618573
>раст смогут осилить только как раз крестовики
да лан те, я вон, кресты не смог (не захотел) осилить, сразу на раст полез.
А те крестовики, которые идут в раст, они, как раз, стараются быть святее Папы Римского, из-за комплекса новообращённых. Как нигеры в Африке головы друг другу режут, доказывая, что ислам/христиантсво самая миролюбивая из религий, так и растовики затравят кого угодно за лишний ансейф (не путать с ансейфами в ffi коде и всякой лоу-лвл работе с железом - они не лишние).
Аноним 29/02/20 Суб 08:19:46 1618598108
>>1618596
Ну не знаю, сдаётся мне и те и те там есть в примерно схожих пропорциях. Одни травят других.

Я вот лично вообще никакие языки не знал, Сначала кресты пытался осилить, вроде начало получаться но потом дропнул потому что пришлось заниматься другими вещами. Потом вернулся но уже на Го, мне он показался минималистичным и прямо то что надо, только потом просёк насколько он медленный по сравнению с крестами и пошёл дальше искать. Вот нашёл Раст, вроде всё устраивает.
Аноним 29/02/20 Суб 08:29:13 1618601109
>>1618596
> затравят кого угодно за лишний ансейф
Одна из проблем это популярность актикса. То есть раст позиционирует себя сейфовым, при это одна из самых популярных либ не особо сейф. Отсюда и предъявы.
Аноним 29/02/20 Суб 08:51:52 1618606110
>>1618601
Ну вот и ЧТД, потому что толковые программисты которым было интересно двигать Раст и имеющие опыт написания серъёзного ПО работающем на низком уровне, скорее всего вышли-то из крестовиков, а там у них выдрачивать байты из компа это привычка, потому без ансейфов им очень неудобно. Ну как бы блядь, не скажу что это плохо, это наиболее вероятный и логичный исход скажем так. Конечно исправить его можно только собрав группу матёрых спецов по Расту (вопрос откуда таких наколдовать) которые бы сделали тот же самый велосипед, но уже без ансейфа. Выглядит как аутизм и какая-то ебанутая игра политическая.
Аноним 29/02/20 Суб 08:54:16 1618607111
Аноним 29/02/20 Суб 09:36:26 1618623112
>>1618607
Именно, что там ансейф был использован в том месте, где без него вполне можно обойтись. Даже так: на базе ансейфа был сделан костыль, чтобы "обмануть" конпелятор.

Я вот сейчас vulkano использую и периодически в него заглядываю - дак там чем глубже в код, тем толще ансейфы - а иначе в работе с железом (не совсем, но железо накладывает долю неопределённости) никак.
Аноним 29/02/20 Суб 10:27:14 1618646113
>>1618623
Кстати интересно знать сколько эта обётрка отжирает по перфомансу.
от нативного вулкана.

тоже програть игрульечку хочеш?
Аноним 29/02/20 Суб 10:51:04 1618655114
>>1618646
Не, у меня больше по машинному зрению и вычислительным шейдерам интересы.
игрульку вот прям на вулкане с нуля - я бы не стал. Оно вроде и заманчиво, а на деле пуд соли съешь и 1000 раз пожалеешь, что не взял готовый движок. Лучше сосредоточиться на сюжете/графоне/геймплее.
Аноним 29/02/20 Суб 11:03:45 1618665115
Artplanescape2.jpg (135Кб, 1155x691)
1155x691
Yc2kGYSSRmI.jpg (73Кб, 811x461)
811x461
eytan-zana-fall[...].jpg (347Кб, 1920x1084)
1920x1084
eytan-zana-swiss.jpg (595Кб, 1920x1180)
1920x1180
>>1618655
Ну смотря конечно какую игру делать. У меня как-то давно загорелось в жопе сделать рогалик где бы механики всякие и симулятивность сука ух бляя. Я полтора года носил эту идею в голове думал ну блять тяжело наверное такое воплощать сука! Временами выливал свои мысли и решения геймплейные алгоритмические о том как те или иные вещи лучше делать, но пиздец, идея до сих пор не отпала, дерёт сука голову и всё, ну я подумал ну хуй с ним будем делать блядь. Вот сейчас учу. решил движок с нуля писать (ну може какие либы подтяну типо bearLib) потому что мне нужен ECS с возможностью рантайм компонентов, мне как раз выше аноны помогали с этим.
Аноним 29/02/20 Суб 11:23:49 1618674116
Быстрый вопрос. У вас в расте есть аналог parameter pack крестов или какой-нибудь другой способ определять список типов?
Аноним 29/02/20 Суб 12:24:01 1618700117
>>1618674
>parameter pack
не знаю, что за зверь, но по звучанию похоже на trait в расте. Или объясни подробнее.
Аноним 29/02/20 Суб 15:25:40 1618868118
>>1618607
1) Ты не там ищешь. Нужно искать втрепе actix-net: https://github.com/actix/actix-net/search?q=unsafe&unscoped_q=unsafe
2) Ансейфов там мало, потому что они используются в фундаментальных типах, которые потом используются везде. Например вот эта функция нужна чтобы ебать borrow checker в рот: https://github.com/actix/actix-net/blob/631cb86947cb2a3d2ccce2db59cf8e6d6fc23680/actix-utils/src/cell.rs#L40 и помечена она как безопасная (сам тип является аналогом UnsafeCell из стандартной библиотеки, только где все unsafe-функции помечены как безопасные), хотя может вызывать UB.
Аноним 29/02/20 Суб 15:26:37 1618871119
Аноним 29/02/20 Суб 15:28:01 1618874120
>>1618871
> pub(crate) unsafe fn get_mut_unsafe(&self) -> &mut T {
Хм, хотя её уже пометили как ансейф (последний раз когда смотрел она была безопасной). Вот что значит уход говнодела. Сразу качество софта повышается.
Аноним 29/02/20 Суб 17:00:09 1619000121
>>1618874
Ну бля, почему сразу говнодела. Без него актикса вообще не было бы, хуёво конечно что он такой UB код высрал, но его всяко теперь можно исправить без особых заморочей чем всё писать с нуля.
Аноним 01/03/20 Вск 11:29:50 1619672122
Аноним 01/03/20 Вск 13:46:44 1619804123
>>1619672
Я питономакакен, который захотел чего-нибудь компилируемого
Аноним 01/03/20 Вск 14:37:13 1619837124
>>1619804
Иди в го.
Rust не взлетит.
Аноним 01/03/20 Вск 15:18:37 1619863125
image.png (113Кб, 1247x1313)
1247x1313
Такое вообще можно на расте написать?
Аноним 01/03/20 Вск 15:23:31 1619868126
Аноним 01/03/20 Вск 15:30:54 1619876127
>>1619837

>>1619837
Мне го не понравился. Отсутствие дженериков после динамического языка причем даже в нем есть их подобие и кривое ООП отбивают все желание.
Аноним 01/03/20 Вск 15:42:20 1619882128
>>1619863
Можно. Берёшь какую-нибудь regex либу и пишешь. В std работы с регексами нет, только со строками.
Аноним 01/03/20 Вск 16:05:43 1619898129
>>1619882
Не какую-нибудь, а вполне себе оффициальную: https://github.com/rust-lang/regex

Правда если он начнёт использовать мега-фичи регулярных выражений, вроде lookahead и lookbehind, то тогда уже придётся переходить на биндинги для PCRE.
Аноним 01/03/20 Вск 16:16:17 1619908130
>>1619898
>мега-фичи
>lookahead и lookbehind
Дожились, это стало мегафичей. обычная и нужная вещь, особенно когда у тебя есть свое экранирование по бэкслешу

Теперь все что не реализовано превращается в "ненужно" как у гоферов?
Аноним 01/03/20 Вск 16:16:17 1619909131
>>1619876
> и кривое ООП
В расте ООП вообще нет. С одной стороны мне после жавы (где ООП в основном используется в виде "один класс наследует интерфейсы") неудобств не предоставило, но с другой из-за отсутствия GAT [1] и отсутствию impl Trait [2] в ассоциативных типах (вторая фича по сути не даёт функциям из трейтов возвращать анонимные объекты, соответствующие какому-то трейту, а первая не даёт вместо со второй фичей возвращать трейт, который хоть как-то зависит от входных параметров) очень неудобно. В жяве я привык всегда возвращать интерфейс, а какой класс там на самом деле его имплементирует - скрывать, а в расте пока это невозможно.

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

[1]: https://github.com/rust-lang/rust/issues/44265
[2]: https://github.com/rust-lang/rust/issues/63063
Аноним 01/03/20 Вск 16:17:23 1619910132
>>1619908
> Теперь все что не реализовано превращается в "ненужно" как у гоферов?
Я честно не знаю реализовано оно в го или нет. В крейте regex но точно не реализовано, потому и предупредил.
Аноним 01/03/20 Вск 16:54:12 1619948133
>>1619909
Есть Box<dyn Yoba>. Просто жава тебе не рассказывает про цену возвращения интерфейсов, а раст прямо в ебло запихивает боксами.
Аноним 01/03/20 Вск 17:37:26 1619983134
>>1619948
Я в курсе. Но я и перешёл на раст потому что хочу перформанса (в том числе ценой меньших аллокаций и работой напрямую с объектами без vtable). Насчёт dyn я в курсе. Например я его использую в одной рекурсивной функции. Сначала пытался использовать impl, но раст выдал мега-ошибку, потому что сам тип тоже рекурсивный и после 128 (по-моему) инстанциаций там была ошибка с гигантским Type<..., Type<..., Type, ..., ...>>>. Но и всё равно обошлось без Box - просто передавал ссылку &mut dyn Type.
Аноним 01/03/20 Вск 18:34:54 1620048135
Аноним 01/03/20 Вск 18:38:07 1620050136
>>1619837
>го
1. Пока что ниша го куда уже, чем потенциально у раста, хотя в этой самой нише он (го) довольно прочно закрепился. Раст также широк, как гвидон, и даже чуть шире (для машобчика только биндингов маловато)
2. Периодически проплывают новости об отказе от го в пользу раста, но не наоборот (может я не те новости читаю)
Аноним 01/03/20 Вск 19:11:13 1620080137
Может кто-нибудь пробовал Godot?
Аноним 01/03/20 Вск 19:41:25 1620122138
Аноним 01/03/20 Вск 20:29:22 1620189139
Аноним 01/03/20 Вск 22:24:48 1620374140
>>1620189
>Kotlin GDNative bindings
Спасибо конечно но нах оно когда я про Rust GDNative bindings прашиваю
Аноним 02/03/20 Пнд 10:36:34 1620724141
Аноним 03/03/20 Втр 09:21:09 1621659142
>>1619909
> GAT
> в этом году завершат

Я искренне завидую твоему оптимизму IIRC его же там взялся делать только один чувак, который потом сказал "ну нахуй". Хорошо бы хоть const generics запилили.
Аноним 03/03/20 Втр 16:56:29 1622019143
image.png (347Кб, 543x513)
543x513
Изучал всякие интересные хуёвины по типу Option<> и Box<>.
Немного невдуплил зачем нужен Box<> вообще. Понятное дело что Option<> решает важную проблему (которую зачем-то намеренно создали), но не понятно нахуя бокс. вроде как любые структуры, массивы и векторы и так выделяются в куче.
Аноним 03/03/20 Втр 17:04:57 1622024144
>>1622019
> любые структуры
Нет.
> массивы
Не все.
> и векторы
Да.
Аноним 03/03/20 Втр 17:14:26 1622033145
>>1622019
Box - это умный указатель, который не может быть скопирован. В основном используется там где ссылки использовать невозможно (например из-за отсутствия GAT и unsized rvalues) либо чтоб не нагромождать структуры шаблонным временем жизни и вместо
struct A<'a> {
b: &'a B,
}
написать просто
struct A {
b: Box<B>,
}
>>1622024
> Не все.
Массивы наоборот всегда выделяются на стеке. Чтобы заставить раст выделить массив в куче как раз и надо использовать Box. И с этим у раста есть проблемы, потому что он вместо того чтобы сразу сделать массив в памяти, сначала делает массив на стеке и потом копирует его в память: https://github.com/rust-lang/rust/issues/53827 Особенно весело выглядит с MaybeUninit, когда со стека в память копируются неинициализированные данные, а стабильного способа создать неинициализированный массив в памяти до сих пор нет: https://github.com/rust-lang/rust/issues/63291
Аноним 03/03/20 Втр 17:14:48 1622034146
>>1622024
Да, хуйню сморозил точно, но всё ещё не понятно нахуя это дело выделять в боксы. Это допустим нужно для того чтобы со всякими структурами играться? ну инициализировать сразу походу пихать их в коробки и в массив, кортеж или хуй пойми куда. Не доходит что-то.
Аноним 03/03/20 Втр 17:17:52 1622035147
>>1622033
Вот, спасибо за пояснения, но пока не совсем понял что такое
GAT и unsized rvalues до конца. Это как-то связано с теми данными и переменными которые во время компиляции устанавливаются?
Аноним 03/03/20 Втр 17:19:22 1622039148
>>1622033
>Массивы наоборот всегда выделяются на стеке.
Интересно насколько это на самом деле больная проблема. Просто мне кажется что обычно когда мы ходим выделить массив в куче, то там лучше применить просто вектор сразу чтобы лишний раз не ограничиваться. Хотя могу ошибаться.
Аноним 03/03/20 Втр 17:19:40 1622040149
Аноним 03/03/20 Втр 17:22:49 1622042150
>>1622040
Нехорошо что ансейф конечно
Аноним 03/03/20 Втр 17:23:57 1622044151
>>1622040
К слову, игра с аллокатором всегда должна через ансейф делаться?
Аноним 03/03/20 Втр 17:46:30 1622069152
>>1622035
Unsized rvalues нужны чтобы можно было на стеке создавать переменные неизвестные на момент компиляции размера (ну и так же передавать их в функции и возвращать). Например dyn Trait - это переменная с неизвестным размером, потому что неизвестно какого размера будет структура, имплементирующаа trait и какого размера будет vtable. Потому dyn Trait можно передавать в (и возвращать из) функций только в виде ссылки (&dyn Trait) или внутри указателя (Box<dyn Trait> или (A)rc<dyn Trait>). Тоже самое касается слайсов - массивов, где количество элементов вычисляется в рантайме.

GAT нужны чтобы внутри трейта можно было создать генерики, которые будут зависеть не только от шаблонных параметров самого трейта, но и от параметров функции где они используются. Например чтобы функции из трейта могли возвращать структуры с шаблонным временем жизни, как здесь: https://play.rust-lang.org/?version=nightly&mode=release&edition=2018&gist=14b4218a38b94f3b4cbf45d8d8a8c464 Сейчас нужно использовать умный указатель для этого: https://play.rust-lang.org/?version=stable&mode=release&edition=2018&gist=37029a81774effb1c091546d564c98d3
Аноним 03/03/20 Втр 17:49:43 1622072153
>>1622042
>>1622044
Неинициализированные массивы всегда будут ансейф. Даже массив [u8; X] без инициализации - ансейф (хотя его использование не может быть UB, поскольку любое значение корректно для u8). Такова позиция разработчиков раста.
Аноним 03/03/20 Втр 17:53:26 1622075154
>>1622069
Ну более мене вдуплил насколько могу, спасибо

>>1622072
Ну что делать, свыкаться только. Но мы же можешь проинициализировать массив структур допустим через Option<MyStrcuct> как None, а потом уже запихать в него в рантайме что надо или просто в другом куске кода?
Аноним 03/03/20 Втр 17:55:55 1622078155
>>1622075
> Но мы же можешь проинициализировать массив структур допустим через Option<MyStrcuct> как None, а потом уже запихать в него в рантайме что надо или просто в другом куске кода?
Для этого есть MaybeUninit: https://doc.rust-lang.org/std/mem/union.MaybeUninit.html но опять таки функция assume_init является небезопасной, потому что компилятор никак не сможет проверить ты точно всё инициализировал правильно или нет.
Аноним 03/03/20 Втр 17:57:30 1622080156
>>1622078
Да уж, с растом приходится от души так перепахивать свои подходы к написанию программ. Ну может оно и к лучшему, раз от этого более безопасный код получается.
Аноним 03/03/20 Втр 18:01:15 1622085157
>>1622080
Впрочем ты можешь использовать Option для инициализации, но у него есть пара недостатков:
1) Он может занимать больше места, потому что должен хранить в памяти ещё и состоянии - инициализирована переменная или нет.
2) Доступ не нему будет всегда медленней, потому что при каждом запросе ко внутренней переменной он будет проверять инициализирована она или нет.
Аноним 03/03/20 Втр 18:02:45 1622087158
>>1622085
Ну да, это может быть дороговато.
Аноним 04/03/20 Срд 14:21:50 1622873159
>>1622072
>хотя его использование не может быть UB, поскольку любое значение корректно для u8

Значение неинициалированного u8 - это undefined, оно не корректно. С т.з. ЛЛВМ.
Аноним 04/03/20 Срд 18:51:08 1623088160
.PNG (128Кб, 1365x1574)
1365x1574
Ух ебать. Там корутины в эмбеддед завели: https://ferrous-systems.com/blog/async-on-embedded/

Теперь (в 99% случаев) не надо ебаться с прерываниями, синхронизацией и прочим говном. Можно просто все прерывания оборачивать в асинхронную функцию и работать как с сихнронными методами. Жалко что для работы в стабильной версии надо ждать пока https://github.com/rust-lang/rust/pull/69033 дойдёт до нее. Если успеют запушить в версию 1.43, то через пару месяцев будет в стабильной. Иначе ещё пол-года ждать.
Аноним 04/03/20 Срд 18:59:27 1623094161
>>1623088
Фигурная скобка очень секси.
Аноним 04/03/20 Срд 21:03:17 1623221162
Салют, ржавые.

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

Я попробовал чуток, мне понравилось что есть карго и нормальная поддержка модулей.

Какие подводные короч?
Аноним 04/03/20 Срд 22:56:23 1623381163
>>1623221
Представь, что ты всю жизнь дрочишь себе рукой. Дрочишь, дрочишь, уже привык, даже не кончаешь через пару секунд. И вдруг у тебя появляется девушка! Приходится переучиваться, учиться двигать бёдрами, а не рукой, туда-сюда, хуяк-хуяк. И охуеть как сложно, и ТНН, и хочется просто взять всё опять в свои руки.

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

Ну и заебёшься всё расписывать, потому что раст не может тебе превратить i32 в usize, когда ты пытаешься достать что-то из массива через индекс. Это круто, примерно как TypeScript по сравнению с жаваскриптом, но макаки часто не могут осилить TS.
Аноним 04/03/20 Срд 23:10:01 1623401164
>>1623381
> И вдруг у тебя появляется девушка!
И у этой девушки одна сиська. Не то чтобы мешает основному действу, но неприятно, особенно когда пытаешься что-то помять рукой в этом месте, а там ничего нет. А родители девушки уже который год кормят обещаниями, что скоро пришьют и вторую и она станет полноценной.
Аноним 04/03/20 Срд 23:17:11 1623404165
>>1623401
Да не, сисек у неё две (системный же язык, можно что угодно написать, надо только немного хуй поднять и через ногу плюнуть). Вот нос с горбинкой и размер у сисек всего первый, но обещают скоро исправить операцией.
Аноним 04/03/20 Срд 23:25:23 1623409166
>>1623404
>системный же язык, можно что угодно написать, надо только немного хуй поднять и через ногу плюнуть
То есть сиська как бы есть, но ее нужно пришивать своими руками
Аноним 04/03/20 Срд 23:28:05 1623410167
.PNG (55Кб, 1169x554)
1169x554
>>1623404
Как миниум из-за отсутствия const generic там нельзя написать кучу абстракций (попробуй например передай в println! массив с более чем 32 элементами). Ну и плюс мегаубогий трейт Read, который используется повсеместно и в который нельзя передать неинициализированные данные без UB. Даже стандартная библиотека признаёт что использует UB (да и все кто хоть как-то заботится о перформансе так делают). Слава богу асинхронную версию Read уже пишут специально затачивая под неинициализированные массивы.
Аноним 05/03/20 Чтв 01:27:35 1623460168
>>1623381
Бля, недавно нашёл тян. Сука, какая же пиздец жиза......
Аноним 05/03/20 Чтв 01:37:34 1623462169
image.jpg (39Кб, 784x643)
784x643
>>1623460
>Rust thread
>нашёл тян
уходи
Аноним 05/03/20 Чтв 03:27:50 1623481170
>>1623381
>даже не кончаешь через пару секунд
в смысле кто-то при дрочке кончает через пару секунд?
Аноним 05/03/20 Чтв 08:12:22 1623530171
>>1623381
Лол, а чем этот сладкий хлебушек от майкрософтов лучше?

Зачем кушать хлебушек, если можно на чистом жиэс писать? Никогда не понимал эти тайпскрипты, пурскрипты, кофескрипты...
Аноним 05/03/20 Чтв 08:26:04 1623532172
>>1623530
Конкретно тайпскрипт лучше за счёт строгой типизации. Позволяет часть ошибок вывести из рантайма в компил-тайм, ну и в целом крупные проекты легче делать со строгой типизацией (особенно если есть проблемы с тщательным документированием каждого метода и написанием тестов).
Аноним 05/03/20 Чтв 09:16:13 1623542173
Ну так для этого TDD есть.
Аноним 05/03/20 Чтв 10:01:18 1623572174
>>1623221
> Стоит ли пробовать раст?
Однозначно стоит. Даже если не подсядешь, вынесешь для себя что-то полезное назад в плюсы.

> Что сложного будет? Говорите порог вхождения высокий, что именно сложное?
It depends. Смотря что ты уже умеешь/знаешь. Думаю после плюсов будет очень хотеться обмазаться указателями, а нельзя. Субъективно для меня было самыми сложными вещами (по нарастающей) - лайфтаймы, различие между (fn, Fn, FnOnce, FnMut), HRTB, ну и процедурные макросы.

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

> потому что раст не может тебе превратить i32 в usize

но потом ты поймешь, что это абсолютно разумные ограничения.

Ну и не хватает иногда каких-нибудь возхможностей языка, приходится ждать, пока сделают/стабилизируют. Но думаю тебе не привыкать, C(++) изменения лет по 10 делают.
Аноним 05/03/20 Чтв 11:02:51 1623629175
>>1623572
Так я и не говорил, что неразумные, я эти ограничения сравнил с TS vs JS, если ты не заметил. Но не все макаки могут в TS, как я уже говорил.
Аноним 05/03/20 Чтв 11:42:10 1623671176
>>1623530
>эти тайпскрипты, пурскрипты, кофескрипты...
Тайпскрипт - это жс со статическими типами.
Пурскрипт - это язык вроде Haskell, только трнаслируется в жс. В отличие от Elm, там есть монады и вся остальная дрочь, но на нём никто не пишет, потому что сложна.
Кофескрипт - это был такой синтаксис сахар, придуманный рубистами, потому что обычный жс для них был недостаточно гибок и эстетичен. Не актуален начиная с выхода ES6.
Инбифо: сорта говна
Аноним 05/03/20 Чтв 16:49:20 1623976177
>>1623572
> Fn, FnOnce, FnMut
С этой хуйнёй больше всего бесит, что сейчас в расте они являются МАГИЕЙ и по сути встроенными вариадик генериками в языке. Отсюда вытекает то, что эти трейты невозможно имплементировать в свою структуру - только использовать синтаксис замыканий.
05/03/20 Чтв 19:44:42 1624212178
>>1623976
Как я пригорел с этой хуйни, изучая комбинаторы раста - просто пиздец. До последнего не хотел гуглить, но все же.

Единственное, с чего жопа на марс улетела за всё время изучения языка, наверное.
Аноним 05/03/20 Чтв 19:45:14 1624213179
Аноним 05/03/20 Чтв 20:06:02 1624256180
>>1624212
Как делаю я:
1. Кодишь на языке, как если бы это был Си, только с хитрым борроу-чекером
2. Постепенно начинаешь осваивать фичи, про которые что-то слышал, но боялся применять на этапе 1. Трейты, дженерики, лайфтаймы.
3. Постепенно начинаешь осваивать фичи, про которые что-то слышал, но боялся применять на этапе 2. Замыкания, dyn трейты, процедурные макросы.
..
N. Постепенно начинаешь осваивать фичи, про которые что-то слышал, но боялся применять на этапе N-1.

как делаешь ты, и многие другие аноны: выучить ВЕСЬ язык, прочитав БОЛЬШУЮ, сука, книжку.

Бля, ну хуй знает, кто из нас прав, может быть даже я не прав. Но мой путь полегше будет.
Аноним 05/03/20 Чтв 20:07:50 1624258181
>>1624256
Жопа начинает гореть примерно на втором шаге когда начинаешь натыкаться на сообщения компилятора, что эта фича экспериментальна и вообще идите нахуй.
Аноним 06/03/20 Птн 05:15:19 1624812182
>>1622873
У LLVM только чтение неинициализированных данных - UB. В расте даже ссылку брать нельзя - сразу UB (можно брать указатель). А трейт Read ничего кроме ссылок не принимает. При том есть те, кто такое поведение защищает и считает, что обнуление памяти перед использованием массива должно быть обязательным (как в языках уровня жявы), а все кто не согласны могут не использовать std.
Аноним 06/03/20 Птн 13:08:00 1624983183
Аноним 06/03/20 Птн 15:44:15 1625073184
>>1624983
Ну если уж лезть в unsafe, то можно и ссылки на неинициализированные данные брать, хуле.
Аноним 06/03/20 Птн 18:32:06 1625258185
>>1624983
Ты нихуя не понял о чём речь. Есть стандартный трейт для чтения данных: https://doc.rust-lang.org/std/io/trait.Read.html
И вот функция непосредственно для чтения:
> fn read(&mut self, buf: &mut [u8]) -> Result<usize>
Переменную buf без UB можно передать только предварительно инициализировав, потому что передаётся не указатель, а ссылка. И этот трейт Read является одобренным STD для блокированного чтения вообще всего.
Аноним 06/03/20 Птн 18:33:50 1625260186
>>1625258
И что самое смешное сама std использует UB с этим трейтом для более быстрого чтения: >>1623410

Но им можно, они ж разработчики компилятора. А всем остальным - низзя. Не для скорости раст создавался, как вы не можете понят.
Аноним 06/03/20 Птн 21:12:51 1625394187
Если угасающая Мозилла продастся Микрософту, то что будет с растом? Сможет ли Микрософт серьёзно нагадить расту после покупки Мозиллы? Или сообщество раста настолько сильное, что сможет развивать без разрабов на зарплате?
Аноним 06/03/20 Птн 21:14:26 1625396188
Аноним 06/03/20 Птн 21:33:35 1625434189
>>1625396
Ну вот под этим предлогом могут "обосновать" покупку Мозиллы, типа "нам ваш опыт раста пригодится".
Аноним 06/03/20 Птн 21:42:44 1625459190
>>1625434
Да там и так из раста потихоньку утекают умы. Вон недавно алекс кринтон ушёл. Правда куда ушёл - неизвестно.
Аноним 06/03/20 Птн 23:55:13 1625631191
>>1625459
>шутишь про два фреймворка за год на жс
>переписываешь проект под каждый мейнстримовый язык раз в пару лет
Аноним 07/03/20 Суб 00:57:58 1625764192
>>1625394
Почему именно микрософт?
У них и так пачка мертвых технологий во всё больше загнивающей экосистеме
Аноним 07/03/20 Суб 08:32:34 1625933193
>>1625394
>Мозилла продастся Микрософту
Есть новость, где почитать? Мозилла, вообще-т, НКО, совсем продаться она не может.
Алсо, у раста уже набралась критическая масса заинтересованных компаний и без мозиллы - можно будет забацать отдельный фаундейшн с донатами.
Аноним 07/03/20 Суб 09:04:01 1625937194
>>1625396
> только лучше
и чем же? гоблядским Pascal.Case говносинтаксисом, ооп, или ебунтыми типами?
Аноним 07/03/20 Суб 09:57:16 1625962195
Аноним 07/03/20 Суб 10:28:40 1625992196
>>1625962
Совсем недавно, когда новые архитектуры устройств выходили чаще, чем опенсорсеры успевали писать для них драйвера, у альтернативных осей не было шансов. Но сейчас, когда закон Мура больше не действует и время жизни архитектур увеличилось (тот же GCN вона сколько протянул) и будет дальше расти - кто знает, вдруг взлетит.
Аноним 07/03/20 Суб 18:56:04 1626485197
>>1625937
> и чем же?
Там лучше курсором было выделено. И очевидно он лучше тем, что сделали его ОНИ сами.
Аноним 07/03/20 Суб 19:10:01 1626490198
>>1626485
> курсором
Курсивом точнее.
slowfix
Аноним 07/03/20 Суб 20:48:21 1626574199
>>1625992

в каком месте закон Мура не действует?
07/03/20 Суб 22:29:23 1626752200
>>1626574
Когда собираешь топовый комп, а выходящая через полгода игруля указывает его спеки как минимальные - вот это действует. А то, что сейчас, это кошачьи слёзы. Даже эти изменения 14->12->7 нм далеко не те, что раньше. До 3х нм доползут, а дальше жизни вообще не будет. Ещё 3d компоновкой пугают, но сразу проблемы с охладом, сводящие на нет полученные преимущества.
Аноним 07/03/20 Суб 22:30:44 1626756201
Аноним 07/03/20 Суб 22:54:12 1626802202
>>1626752
Ну, то, что макакены нынче не думают о перформансе от слова совсем (см всякую хуйню вроде пабга или говнину из шапки, у которых графика 2012-го (ебаный кризис 3 в 2013 выглядел в 40 раз лучше) и требования как у ебаного космолёта даже по меркам 2020) — это, конечно, показатель.

Да и не факт что до 3 нм доползут хотя бы лет через 5, даже 7 нм уже трудно окупить, всё же зависит от окупаемости инвестиций в конце концов.
Аноним 08/03/20 Вск 00:19:37 1626941203
А можно как-то делать панику если NaN вылазит? Не вручную.
Аноним 08/03/20 Вск 00:54:23 1626965204
>>1626941
if float.is_nan() { panic!() }

В смысле "не вручную"?
Аноним 08/03/20 Вск 02:06:53 1626989205
>>1626965
Чтобы не приходилось расставлять ифы.
Аноним 08/03/20 Вск 02:28:23 1626993206
>>1626989
Опять макаки какую-то сраную магию хотят, блет.

macro_rules! kek {
($float:expr, $code:tt) => {{
if $float.is_nan() {
panic!("it' fucking NaN!")
} else {
$code($float)
}
}}
}
Аноним 08/03/20 Вск 02:34:52 1626997207
>>1626993
Блин ну попросили же не в ручную
Аноним 08/03/20 Вск 02:35:40 1627000208
Есть ещё вариант сделать

struct Yoba { inner: f32 }
impl Yoba {
fn new(f: f32) -> Self { Self { inner: f } }

fn mut(&mut self, f: f32) {
if f.is_nan() { panic!() }
*self.inner = f;
}

Поскольку Assign операция не оверлоадится, только так можно, всё время используя .mut().
Аноним 08/03/20 Вск 07:44:57 1627061209
Есть прога test1.rs https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=460eeee90939808deb1177ad4886ec98
Если её запустить без аргументов, то она закономерно падает в панике, но при этом компилятор не показывает номер строки с ошибкой. Вместо этого показывает номер строки в одном из модулей растовской библиотеки(libcore/slice/mod.rs), но это не то. Как заставить компилятор показывать ошибочную строку именно в test1.rs?
Аноним 08/03/20 Вск 07:58:52 1627062210
>>1627061
Нужно установить переменную окружения RUST_BACKTRACE в 1 и компилировать с panic = "unwind" в cargo.toml (но он так делает по-умолчанию). Там на 17 месте и будет main
> 17: playground::main
> at src/main.rs:6
Аноним 08/03/20 Вск 08:01:50 1627063211
>>1627062
Ах да, если компилируешь в релизном режиме нужно установить в cargo.toml парметр debug = 1 (можно 2, но тогда код будет медленней, а 1 достаточно для бэктрейсов). Ну и на винде pdb-файлик он не копирует c exe-шником - надо ручками брать из каталога deps.
Аноним 08/03/20 Вск 08:33:45 1627066212
>>1627063
Спасибо.
Лишь с RUST_BACKTRACE=1 и panic=unwind не выводилось, а вот с debug получилось. Точнее с debuginfo
rustc -C debuginfo=1 test1.rs
Аноним 08/03/20 Вск 08:37:10 1627067213
>>1627066
Ну у меня в cargo.toml есть специальное указание для генерации информации для отладки в релизном режиме:
[profile.release]
panic = "unwind"
lto = true
debug = 1

Я её использую для логирования паники с этим крейтом: https://crates.io/crates/log-panics (там устанавливать RUST_BACKTRACE уже не нужно, потому что код записывают всю информацию в лог-файл в любом случае).
Аноним 08/03/20 Вск 20:43:49 1627896214
Выделение038.png (21Кб, 739x161)
739x161
Как это заебало. Вот неужели нельзя как-то запросто указать, что U != T, чтобы дефолтная автоимплементация шла лесом?
Сука, аж бесит.
Аноним 08/03/20 Вск 21:45:00 1627960215
>>1627896
А че ты вообще хочешь сделать то?
Аноним 08/03/20 Вск 21:52:08 1627963216
>>1627960
Очевидно же, что хочет преобразовывать Pet<A> в Pet<B> при помощи трейта From. Но конпелятор жалуется, что преобразование из Pet<A> в Pet<A> уже определено в std и потому его имплементация трейта недействительна.
Аноним 08/03/20 Вск 22:12:57 1627984217
>>1627963
Вот именно. Я хочу преобразование для разных дженерик типов, о которых известно только то, что они именно что разные. Но известно только мне, я не могу донести это конпелятору, который жалуется, что у него уже есть определение для одинаковых типов и зачем, мол, ещё одно.
Аноним 09/03/20 Пнд 05:13:07 1628234218
>>1604129
Я помню первые тесты, раст болтался где-то между джавой и с++. Не буду хейтить, может и правда допилили и все там внутри стало шустро. Но больше выглядит как подгонка под все эти недо-тесты.
Аноним 09/03/20 Пнд 05:38:05 1628240219
Есть несколько вопросов по расту, не охота с головой в него погружаться поэтому более общая картина.

1) Насколько раст хорошо подходит для прикладных приложений. Это скорее будет похоже на разработку на С++ или будет уже какой-то уровень JAVA?

2) Какие основные преимущества языка?

3) Какие фатальные недостатки?
Аноним 09/03/20 Пнд 06:09:54 1628248220
>>1628240
Поясню, есть возможность выбрать язык под проект, раст выглядит таким универсальным языком с перспективами, хочется знать общую картину по языку.
Аноним 09/03/20 Пнд 08:11:43 1628264221
>>1628240
1. Ближе к жабе в плане того, что есть инфраструктура либ и зависимостей и безопасная работа с памятью, а трейты похожи на интерфейсы. Даже лучше жабы в том плане, что нет сюрпризов в виде неожиданных null.
2. Сахарный, безопасный, быстрый.
3. Сложноват для начинашек, нельзя вот так просто взять и сразу начать писать большую приложуху, каждому разработчику придётся съесть свой пуд соли.
Аноним 09/03/20 Пнд 09:36:41 1628278222
>>1628240
>не охота с головой в него погружаться
Тогда я бы не советовал
Всё-таки основные фишки языка слишком специфичны и требуют
отдельного осиляторства
>Это скорее будет похоже на разработку на С++ или будет уже какой-то уровень JAVA
Ближе к жабе
Аноним 09/03/20 Пнд 11:26:36 1628345223
golang.png (307Кб, 1024x951)
1024x951
А есть тут те, кто свалил с Go на Rust? Вы наверняка переписали свои проекты. И насколько (в среднем) изменилось количество строк кода? Хорошо ли заметен прирост производительности?
Аноним 09/03/20 Пнд 11:40:37 1628351224
И участвуете ли в разработке системщины, или всё ещё барахтаетесь в тех нишах, для которых пригодны языки с GC?
Аноним 09/03/20 Пнд 12:19:25 1628379225
>>1628351
Лично я на расте из серьёзного написал (точнее переписал с C#) только специальный сервер, который общается с устройством через COM и передаёт данные дальше через GRPC. Разница только во времени запуска программы и потреблении памяти (с C# было около 160Мб, на расте 1.4Мб, лол).
Аноним 09/03/20 Пнд 12:29:34 1628411226
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=33170bf169071d25bd0ffce3356fba4c

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

Или это незаконно вообще -- делать фабрику dyn Trait?
Аноним 09/03/20 Пнд 13:12:41 1628454227
>>1628411
1) Тут
> struct Factory<T: Animal + FromString + ?Sized> {
можно оставить просто
struct Factory<T: ?Sized> {
в расте в определении структуры параметры нужно уточнять только в том случае, если это необходимо. В твоём случае необходимости в Animal и FromString нет.
2) Тут
> impl<T: Animal + FromString + ?Sized> Factory<T> {
нужно убрать FromString. Он в имплементации не используется и потому может быть спокойно удалён
impl<T: Animal + ?Sized> Factory<T> {

После этих исправлений код компилируется и работает.
Аноним 09/03/20 Пнд 13:33:32 1628467228
>>1628411
> Понимаю, что ничего не понимаю
И да, код не компилировался потому что у тебя две ошибки:
1) dyn может использоваться только с одним трейтом, а ты требовал, чтобы параметр T имплементировал два трейта: Animal и FromString. В теории этом можно решить определив трейт Animal так:

trait Animal: FromString {
fn say(&self) -> String;
}

тогда каждая структура имплементирующая Animal должна будет имплементировать и FromString. но тут возникает вторая проблема:

2)
trait FromString {
fn from_string(s: String) -> Self;
}

> fn from_string(s: String) -> Self;
Такая функция (где нет параметра self) не может использоваться в dyn-трейтах. Можно "исправить" заставив функцию быть невидимой в них:

trait FromString {
fn from_string(s: String) -> Self where Self: Sized;
}

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

Впрочем ей и Animal не нужен (тогда зачем вообще там параметр T?). Почему бы просто не сделать
> impl<T: ?Sized> Factory<T> {
?
Аноним 09/03/20 Пнд 13:46:08 1628484229
>>1628454
Анон, спасибо большое, что нашел время на разбор моей дрисни! Я, в общем, хотел просто описать контракты, чтобы во время компиляции все упало, если структура не реализует FromString (в реальности там будет json::Value, и из него будут браться данные для инициализации структуры) и не реализует Animal. Но я вообще не в том месте решил городить ограничения, фабрике вообще должно поебать, как оно там все будет реализовано. Великолепно меня Раст пнул за непонимание того, что я хочу на самом деле сделать.

Написал чуть более обобщенно. Не очень понимаю, как все же далее ограничить в фабрике регистрацию только тех dyn Trait, для которых будет реализован FromString. Этот трейт важен, так как, как я уже выше говорил, на самом деле там из JSON данные разгребаться будут, это такой конструктор, и без подобной фабрики мне не решить задачу.

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

> trait Animal: FromString {
Я тоже подумал, что это что-то не совсем адекватное, хоть и полностью решает вопрос с жестким контрактом на этапе компиляции.

Поэтому буду искать другое решение, но пока не сильно понимаю, в какую сторону идти. Насколько понимаю, я не могу от dyn Trait требовать реализации какого-нибудь интерфейса трейта.
Аноним 09/03/20 Пнд 16:36:16 1628625230
>>1628484
Ты хочешь динамику, которая тебе всё обработает в рантайме. Но дело в том, что все эти

trait Yoba и fn foo(a: YobaType) -> Yobatype

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

enum Flagged<D: Data> {
Foo(D),
Bar(D),
}

fn try_pet(d: Flagged) -> Option<> {
match d {
Foo(data) => pet(data.into_animal()),
Bar(data) => None, // It's bot animal!
}
}
Аноним 09/03/20 Пнд 16:58:22 1628648231
Screenshot20200[...].png (34Кб, 330x497)
330x497
Screenshot20200[...].png (97Кб, 954x739)
954x739
>>1628625
У меня порт с ECMAScript-языка (AS 3.0).

> Если у тебя там всё просто
Смотря что имеешь в виду. Структур там ну сотни, наверное. Попытаюсь объяснить, с чем вообще имею дело.

Есть JSON-сопля примерно такого содержания: https://pastebin.com/WMc001Sh

В `actions` описана декларативно игровая логика, и у нас тут в каждом действии могут быть десятки разновидностей Requirement, Amount (вместо числа 30 мог быть сложный объект для расчета скидки при покупке) и прочее такое. Прикладываю примерные иллюстрации того, как все выглядело в оригинале.

В рамках изучения Rust пытаюсь реализовать что-то похожее, но пока хуйню делаю какую-то.
Аноним 09/03/20 Пнд 18:29:58 1628776232
6009981545.jpg (154Кб, 907x1200)
907x1200
ozon обезумел (?) и продал пикрил за 1678р, хотя обычно зарубежные издания продаются у них по 5-7 тысяч рублей ( не знаю уж кто их покупает за такую цену, видимо мутанты какие-то ). Получилось даже дешевле, чем с amazon'а ( тем более с сегодняшним-то курсом доллара, ололо ). Похоже был единственный экземпляр и после моего заказа эта позиция стала более не доступна.

Кто-нибудь на ozon'е с таким еще сталкивался? Что это, просто они что-то перепутали, либо ж иногда годнота все же у них продается без запредельной наценки?
Аноним 09/03/20 Пнд 18:44:42 1628801233
>>1628776
Сейчас бы вместо The Book и Rustonomicon читать какую-то срань за полторы тысячи.
Аноним 09/03/20 Пнд 19:04:49 1628839234
>>1627963
>>1627984
Незнаю уж что вам там очевидно.
По факту он хочет Pet<T> -> Pet<T>
Потому что если компилятор ничего не знает о A/B, то A = B = T
Аноним 09/03/20 Пнд 19:11:10 1628849235
>>1628801
лалка, это и есть the book, только в бумажном виде
Аноним 09/03/20 Пнд 19:42:58 1628884236
>>1628839
>Потому что если компилятор ничего не знает о A/B, то A = B = T
ну, вот ты, умный, расскажи, как донести до конпелятора, что я имплементирую для A != B, чтобы он шёл лесом со своей имплементацией для A = B
Аноним 09/03/20 Пнд 19:53:55 1628895237
>>1628884
Имплементируй для конкретных типов.
Аноним 09/03/20 Пнд 19:57:57 1628905238
>>1628895
Вот, никак, и я о том же.
Аноним 09/03/20 Пнд 20:06:33 1628916239
>>1628905
Каким образом компилятор по твоему должен отличить тип A от типа B, если о них ничего неизвестно?
Аноним 09/03/20 Пнд 20:46:06 1628943240
>>1628916
>если о них ничего неизвестно?
Как же неизвестно, когда известно, что А точно не В. Я даже готов сообщить об этом конпелятору. Куда писать, в какое окошко?
Суть: у нас есть собаки, физически одинаковые (на уровне структуры), но есть дикие и домашние. Дикие имплементируют кусание, домашние - нет. Вот хочу я превращать диких в домашних со скоростью света - так как различий в структуре нет, мне нужно только копировать данные, ничего не меняя.

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=12cf296b2e20689c94aa73920c5a10cc

проблема в том, что речь не о собаках и не о всего лишь 2х типах, там их несколько больше. Я, конечно, могу заимплементить для каждого случая, но бля, зачем, почему, какого хуя - если все они одинаковые?
Аноним 09/03/20 Пнд 20:46:28 1628944241
>>1628884
#![feature(specialization)]
Разве нет?

Ну или

struct Foo<A>(A);
impl<A> Deref for Foo<A> {
type Target = A;
...
}
impl<A> DerefMut for Foo<A> {
...
}
impl<A> Trait_1 for Foo<A> {
fn yoba(self) { (self).yoba() }
}

struct Bar<B>(B);
impl Deref for Bar ... { ... }
impl DerefMut for Bar ... { ... }
impl<B> Trait_2 for Bar<B> {
fn other_yoba(self) { (
self).other_yoba() }
}
Аноним 09/03/20 Пнд 20:52:28 1628951242
>>1628944
Блин, забыл, что двач звёздочки жрёт. Короче, делаешь тип-обёртку под каждый трейт, имплементишь дерефы для обёртки и имплементишь сам трейт для обёртки через дереф. Там, конечно, надо написать
<A:Trait_1>
в паре мест, но вообще всё просто. Задерефить не забудь, там вроде видно, в каком месте звёздочки стоят.
Аноним 09/03/20 Пнд 21:06:28 1628964243
>>1628951
Ни хуя не понятно. Давай ещё раз, со звйздочкой. Вот, держи ★
Аноним 09/03/20 Пнд 21:12:30 1628976244
Аноним 09/03/20 Пнд 21:18:16 1628984245
>>1628964
Просто хуёришь обёртку с <T> генериком. Потом под этот генерик подставляешь любую нужную структуру, которая может в impl Trait, потом через Deref имплементишь Trait для обёртки, и вуаля, ты можешь использовать трейт как структуру.
Аноним 09/03/20 Пнд 21:48:42 1629002246
>>1628984
Ты дурак? Он хочет донести trait solver'у, что хочет имплементировать From для всех T и U кроме T = U. Deref работает уровнем ниже. И сейчас это сделать попросту невозможно и даже в планах нет разрешать при проверке трейтов что-то кроме X = Y.
Аноним 09/03/20 Пнд 21:51:21 1629005247
>>1629002
Я думаю, что надо понять, что он хочет на самом деле. Потому что вероятно, есть более подходящие варианты достичь результата.
Аноним 09/03/20 Пнд 21:55:42 1629007248
>>1628984
В твоём примере есть Dog, который может конвертироваться в Pet(Dog) и Wild(Dog). А вот чтобы Pet(Dog) <-> Wild(Dog) - такое можно? А Pet(Poodle(Dog)) <-> Wild(Dog) ? Как я понимаю, нужно конвертить Any(Dog) -> Dog, но что-то не вдуплю с разбегу, как это.спать пора, видать
Нужно именно это, так как эти сущности должны сперва кусаться каждый по-своему, а уж потом превращаться одно в другое.
Аноним 09/03/20 Пнд 22:02:21 1629014249
>>1629007
Кажется ты пытаешься изобрести ооп в стиле с++. Может не надо?
Аноним 09/03/20 Пнд 22:15:25 1629019250
>>1629007
Это блядские генерики. Просто делаешь
impl<A> Foo<A> {
fn get(self) -> A {
self.0
}

и пишешь

let foo = Foo(...);
let bar = Bar(foo.get());
Аноним 09/03/20 Пнд 23:00:47 1629054251
Аноним 10/03/20 Втр 00:41:55 1629118252
РЕШИЛ ВКАТИТЬСЯ В РАСТ
@
ПОЛОВИНА ЛИБ - "ЭТО АЛЬФОВЕРСИЯ, НЕ ТРОЖЬТЕ!"
@
ДРУГАЯ ПОЛОВИНА - БИНДИНГИ К ЦЭПЭПЭ
Аноним 10/03/20 Втр 00:42:35 1629119253
Аноним 10/03/20 Втр 00:48:06 1629126254
>>1629118
Как тебе не стыдно. Ты забыл про самое важное:
БЕЗОПАСНАЯ БИБЛИОТЕКА НА БЕЗОПАСНОМ ЯЗЫКЕ
@
2145 UNSAFE-БЛОКОВ
Аноним 10/03/20 Втр 15:24:42 1629441255
Есть причина, почему раст плохо развивается? (не хейтер, просто посматриваю за языком)
Аноним 10/03/20 Втр 16:14:37 1629479256
>>1629441
1) Небогатый пул либ, в проде этот яп соснет хуйца в виду отсутствия большого количества либ для решения самых разных проблем, а писать либы с нуля - прерогатива далеко не всех прогеров. Хуяк-хуяк и продакшн не получится, а бизнес этого требует.
2) Есть кресты и си с огромной базой, огромным кол-вом специалистов. Раст как бы пытается быть безопасной версией оных, но это отличие недостаточно для того, чтобы все поголовно перешли с крестов и си на раст.
3) Эзотерический синтаксис, не самый простой язык в общем (хоть кресты все равно сложнее, офк). В виду того, что это системный яп, он требует имплементации низкоуровневого дрочева по типу зацикленных связынх списков, которые нельзя заимплементить без ансейфа, который нивелирует всю мякотку безопасности раста. В итоге получается, что серьезный системный софт, написанный на расте, требует использования ансейфа во многих моментах, что убивает весь смысл раста как замену си и крестам. А шило на мыло никто менять не хочет, раст без безопасности - ненужная хуета, так как есть кресты и си с огромной инфраструктурой и тонной спецов. Да и весь легаси тоже надо как-то поддерживать.
Аноним 10/03/20 Втр 18:14:21 1629562257
>>1629479
>раст без безопасности - ненужная хуета
Ну это же вроде как редкие случае, узкие подконтрольные места? Есть ли смысл все в абсолют возводить?

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

Почему и тут раст должен прям полностью быть safe (или прям это у них фанатичная позиция на этом)?
Аноним 10/03/20 Втр 18:21:03 1629566258
>>1629562
Юношеский максимализм, сэр.
Аноним 10/03/20 Втр 18:25:34 1629567259
>>1629126
>>1629118
БИБЛИОТЕКА ДЛЯ ТРУ-ФП ЯЗЫКА
@
БИНДИНГИ К СИШНЫМ ЛИБАМ


Вас никто не ограничивает в выборе путей для профессионального развития. Вы же не сотрете свои высеры в старых тредах, если вдруг Раст или Хаскель победят в мире разработки ПО лет через двадцать. Зачем срать тогда? Берите из разных технологий, языков, фреймворков и паттернов лучшее, срывайте лучшие из плодов человеческой мысли.
Аноним 10/03/20 Втр 19:47:44 1629603260
>>1629562
ансейф ансейфу рознь. Одно дело, когда ты делаешь что-то вроде transmute и в том, что внутри валидные данные, ты мамой клянёшься.
А другое, когда ты наябываешь борроучекер, со словами "ну не, тот поток точно записать ничего не успеет" - а потом оно успевает в продакшене.

>>1629562
>класс задач, где null нужен
В той же жабе есть и Optional, и null. Почему они не могут во всех вызовах, где может быть возвращён null, обернуть результат в Optional? Дык, не нужен им null, а просто легаси же. Вот пусть и ебутся с null, пока не закопают вместе с языком. В расте этого изначально нет, и слава б-гу. Хотя со временем свой груз легаси-"фич" наверняка образуется.
Аноним 10/03/20 Втр 19:52:34 1629607261
>>1629603
>Хотя со временем свой груз легаси-"фич" наверняка образуется.
Порядок дропа. Уже превратили в стейбл фичу из-за легаси.
Аноним 10/03/20 Втр 21:14:04 1629655262
>>1629603
> А другое, когда ты наябываешь борроучекер

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

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

>>1629607
Поясни плиз
Аноним 10/03/20 Втр 21:16:41 1629656263
>>1629655
struct Yoba {
a: Foo,
b: Bar,
}

let y = Yoba::new();
drop(y);

Порядок дропа чётко определён в расте. Вроде бы сперва падает b, потом a, но это неточно, потому что я давно об этом читал. Но порядок точно определён.
Аноним 10/03/20 Втр 21:25:11 1629660264
>>1629656
... а раньше не был.

Очевидно.
Аноним 10/03/20 Втр 21:26:11 1629661265
Аноним 10/03/20 Втр 22:28:22 1629697266
>>1629656
>>1629661

Понятно. Теперь непонятно, нахуя вообще полагаться на порядок дропа полей структуры? В чем смысл? Когда такое может пригодиться?
Аноним 11/03/20 Срд 07:01:00 1629867267
>>1629697
Ну, скажем, ты повешал на дроп коллбэк и тебе кровь из носа важна очерёдность исполнения этих коллбэков.
Аноним 11/03/20 Срд 12:01:48 1629994268
>>1629118
Раст уже обогнал по количеству библиотек перспективные языки типа Nim и D, которые появились раньше.
Аноним 11/03/20 Срд 12:38:11 1630014269
>>1629994
>D
С D вообще смешная история была: на нём изначально был написана первая версия OpenMW, но потом коммьюнити решило, что ну его нах, и переписали на крестах. С растом пока чаще случается наоборот - на нём переписывают с крестов.
Аноним 11/03/20 Срд 12:40:01 1630016270
>>1630014
Видел пару статей где переписывали с раста обратно на кресты.
Аноним 11/03/20 Срд 13:28:46 1630070271
Аноним 11/03/20 Срд 13:33:25 1630074272
>>1630070
Там оправдывали тем, что на расте мало программистов, которые будут поддерживать продукт. Их можно понять.
Аноним 11/03/20 Срд 14:18:07 1630145273
>>1628776
>>1628849

это другая книга. Читаю её сейчас, впринципе она лучше раст бука только тем что там информация в более полном виде (500 стр.)
Аноним 11/03/20 Срд 14:42:29 1630173274
image2.jpg (69Кб, 630x630)
630x630
image.png (10Кб, 333x69)
333x69
ПОЧАЛОСЬ
О
Ч
А
Л
О
С
Ь
Аноним 11/03/20 Срд 22:06:04 1630541275
>>1629867
Короче выглядит пока как то, что нужно знатно упороться, чтобы сделать такое. Но при этом я совершенно за, чтобы поведение было четко определено все таки.
Аноним 12/03/20 Чтв 08:16:22 1630754276
>>1630541
Вот из-за таких как ты легаси выглядит как говно, а не как конфетка.
Аноним 13/03/20 Птн 05:07:55 1631840277
>>1630173
Они там субд и модули для машинного обучения разрабатывают, так что до веб макакинга еще далеко.
Аноним 14/03/20 Суб 19:39:18 1633121278
Аноним 15/03/20 Вск 18:18:39 1633917279
Если go - примитивный, то почему до сих пор нет транспайлера go-to-rust?
Для миграции на rust было бы удобно, заодно и библиотек прибавилось бы.
Аноним 15/03/20 Вск 19:02:07 1633946280
>>1633917
Потому что Go -- язык с GC, и напрямую код под концепции владения не переделать? Потому что все interface{} станут unsafe {}? Потому что на хуй не нужно низкосортный (как минимум с точки зрения языка с поддержкой обобщений) код переносить куда бы то ни было вообще, ведь архитектурных и композиционных различий там будет миллиард?
Аноним 16/03/20 Пнд 17:59:36 1634469281
Аноны, а что
some_array[5..10] = [1,2,3,4,5];
ещё не завезли?
Аноним 16/03/20 Пнд 18:40:38 1634487282
>>1634469
А если у тебя справа элементы не Copy будут?
Аноним 16/03/20 Пнд 18:56:53 1634493283
Аноним 16/03/20 Пнд 18:57:23 1634494284
>>1634487
Если элементы Copy, то уже сейчас можно использовать https://doc.rust-lang.org/std/primitive.slice.html#method.copy_from_slice

В теории можно правую часть забирать и элементы перемещать (а все объекты в расте можно перемещать), но без ручного ансейфа это не сделать, а в виде функции не добавить, потому что unsized rvalues не стабильны (а они нужны чтобы функция могла принимать непосредственно слайс, а не ссылку на него).
Аноним 16/03/20 Пнд 19:16:54 1634502285
>>1634494
С вектором всё понятно, он гибкий. А я хочу именно массив, для, типа, скорости.
Суть
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=10ab13f92246ec0d69de4c6343692e48

the size for values of type `[usize]` cannot be known at compilation time
но конпелятор явно пиздит, так как цикл я задаю той же константой, что и размер массива. Т.е., там всё просчитывается, другое дело, что разрабы конпелятора до этого надеюсь, пока не добрались.
Прост матчи со слайсами приделали - вот я и подумал, что тут как-бы похожая задача, даже попроще.
Аноним 16/03/20 Пнд 19:25:26 1634505286
>>1634502
>для, типа, скорости.
Ясно-понятно. Ты померил, надеюсь не от жопы?
Аноним 16/03/20 Пнд 19:31:29 1634508287
Аноним 16/03/20 Пнд 20:05:11 1634531288
>>1634508
> Бля, со слайсам заработало
Потому что массив автоматом может превращаться в слайс.
> Arrays coerce to slices ([T]), so a slice method may be called on an array. Indeed, this provides most of the API for working with arrays.
Аноним 16/03/20 Пнд 20:07:43 1634532289
>>1634505
> Ты померил, надеюсь не от жопы?
Ну как минимум массив (если не использовать Box) выделяется на стеке, а вектор всегда в куче. Так что если элементов мало и их количество известно, то использовать вектор нет смысла. Другой вопрос, что без константных генериков использовать массивы с более чем 32 элементами очень сложно, потому что для них отсутствуют куча трейтов.
Аноним 16/03/20 Пнд 20:33:29 1634552290
>>1634508
> Не, ну почему нельзя напрямую заебошить через "=", чтобы как в лучших домах?
1) Наверняка это значительно усложнит парсер. Сейчас в расте даже избавляться от ебанутого синтаксиса вызова генерик функций (yoba::<u32>()) не хотят (конкретно, избавится от этих :: перед списком типов).
2) Слишком много магии, а этого расторазрабы очень не любят. Вместо того чтобы вводить новый синтаксис, можно это решить функцией

fn move_from_slice(&mut self, src: [T])

но чтобы эта функция заработала нужны unsized rvalues. Пока что можешь использовать unsafe-аналог: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=e5e2c0dcb4120f3d6f187c30132deb6a
Аноним 16/03/20 Пнд 20:48:45 1634569291
Аноним 16/03/20 Пнд 20:59:49 1634577292
Аноним 16/03/20 Пнд 21:07:04 1634582293
>>1634552
>>1634569
да лан, меня и слайсы устраивают, в-принципе. Вот только жопно, что размеры только в рантайме чекаются
my_array[i5..(i+1)5].clone_from_slice([i, i+1, i+2, i+3, i+4, i+5].as_ref());
Аноним 16/03/20 Пнд 21:13:37 1634586294
>>1634582
Там не в слайсах дело, а в том, что элементы слайсов должны иметь трейт Copy (то есть должны быть тривиально копируемы).
> что размеры только в рантайме чекаются
Тут да. Чтобы чекать в компил-тайме нужны константные генерики, которых до сих пор нет.
Аноним 16/03/20 Пнд 21:15:26 1634587295
>>1634582
> clone_from_slice
copy_from_slice будет быстрее (он тупо копирует кусок памяти, а clone копирует по-элементноб вызывая у каждого функцию clone).
Аноним 20/03/20 Птн 03:56:44 1637635296
Как Раст умудряется быть и быстрым как C, и в то же время безопасным?
Аноним 20/03/20 Птн 06:04:25 1637651297
>>1637635
Потому что в рантайме никаких проверок нет. Все процедуры влияющие на безопасность (borrow checker например) происходят только при компиляции. Дальше код такой же как и на C. Ещё есть что-то связанное с нулевой стоимостью абсстракций таких как обобщённые типы. Где просто под каждый возможный тип при запуске программы резервируется функция реализующая этот тип. Это очень быстро работает в рантайме.
Аноним 20/03/20 Птн 08:13:46 1637681298
>>1637635
Он не такой же быстрый. Кидаешь в godbolt две идентичные проги на C и раст и смотришь на сгенерированный ассембли. Там случае с алиасингом разве что оптимизируются llvm лучше
Аноним 20/03/20 Птн 08:34:56 1637690299
>>1637651
А зачем вообще нужны динамические сборщики мусора, как в Java и C#, если можно делать как в Расте, собирая мусор при компиляции?
Аноним 20/03/20 Птн 08:46:24 1637695300
>>1637690
Глупый вопрос.
Облегчает и ускоряет разработку
Аноним 20/03/20 Птн 08:48:38 1637696301
>>1637690
Чтобы программисты не рыдали, пытаясь писать графовые структуры. И да, раст никакой мусор при компиляции не собирает, он просто контроллирует времена жизни
Аноним 20/03/20 Птн 08:58:50 1637701302
>>1637695
Каким образом? В расте же не нужно вручную освобождать память, за тебя это делает компилятор.
Аноним 20/03/20 Птн 09:04:41 1637705303
>>1637701
Компилятор это не бесплатно делает, а ограничивает действия которые может сделать программист, а это как раз таки и усложняет разработку. конечно смотря разработку чего
Аноним 21/03/20 Суб 15:35:15 1639204304
>>1637690
>А зачем вообще нужны динамические сборщики мусора, как в Java и C#, если можно делать как в Расте, собирая мусор при компиляции?

Отличный вопрос! Для того чтобы знать ответ, нужно раскопать несколько вещей.

borrowck это не сборщик мусора, это механизм, который позволяет проверять на этапе компиляции что ссылки не "живут" дольше того на что они ссылаются. Освобождение ресурсов происходит автоматически по концу скоупа в котором живет переменная (есть исключения вида move semantics и std::mem::forget).

borrowck не решает все возможные задачи по организации ресурсов, и не подходит для всех задач. Если ты попытаешься написать двусвязный список на расте, то столкнешься с огромным количеством веселья. https://rust-unofficial.github.io/too-many-lists/ . Почему так? Потому что в с двусвязном списке крайне сложно гарантировать что все указатели нормальные И время жизни известно на этапе компиляции. Приходится использовать более сложные структуры данных, такие как Rc, rc::Weak, арена+индексы.

Так же, довольно сложно эффективно выразить в рамках borrowck такие структуру данных как граф и деревья со ссылками к родителям. И такие структуры данных очень часто используются во всяких UI. Есть разные решения, но они все идут в обход borrowck -- чаще всего используются или сырые указатели (что unsafe), Rc/Arc или арена+индексы. Сборщики мусора же идеально подходят для задачи "я хочу иметь ссылки во все стороны и не заботиться о памяти".

Еще хочу добавить что в расте технически возможно использовать сборщик мусора в виде библиотеки, таким образом можно совместить сборку мусора для структур которые этого требуют и borrowck для структур которые этого не требуют. Большинство программ этого не делают и в этом не нуждаются.
Аноним 21/03/20 Суб 15:40:54 1639215305
>>1639204
> Если ты попытаешься написать двусвязный список на расте, то столкнешься с огромным количеством веселья.
Это было до появления Pin. Сейчас можно даже написать безопасный intrusive двусвязный список, который вообще не будет выделять память, а вся информация для списка (ссылка на следующий и предыдущий элементы) будет храниться непосредственно внутри элементах списка (потому что Pin будет гарантировать, что ссылки не сдохнут и элементы никуда не переместятся). Мегакрутая вещь, потому что позволяет обойтись без аллоцирования памяти внутри асинхронных алгоритмов (поскольку можно делать списки, хранящие внутри себя Future без выделения памяти).
Аноним 21/03/20 Суб 15:49:34 1639228306
>>1639215
Я мимокрокодил, но можно поподробнее? Я из пинов трогал только Box::pin и вообще без понятия, как там список будет выглядеть
Аноним 22/03/20 Вск 16:12:32 1639956307
Сейчас у всех растоманов принято прогонять код через rustfmt? Или каждый городит свой стиль?
Аноним 22/03/20 Вск 19:39:44 1640147308
>>1639228
Pin в отличии от простых ссылок помимо гарантии о том что объект не умрёт, даёт и гарантию, что объект не будет перемещён. Но, однако, ссылки всё так же остаются ссылками, а значит тебе придётся ебаться с лайфтаймами, если хочешь писать чисто безопасный код. А учитывая, что зачастую возможностей раста не хватает для адекватной работы со структурами с лайфтаймами (например из-за отсутствия GAT), то многие предпочитают по старинке использовать unsafe.
>>1639956
Он настраивается если тебе что-то не нравится: https://github.com/rust-lang/rustfmt/blob/master/Configurations.md
Я лично использую дефолтный пресет.
Аноним 22/03/20 Вск 22:41:15 1640323309
Есть ли какие-нибудь тематические чаты по расту на русском? инб4 Гугл показывает ебаные видеоигры
Аноним 22/03/20 Вск 23:27:12 1640362310
Аноним 23/03/20 Пнд 12:09:31 1640579311
Аноним 26/03/20 Чтв 09:57:33 1642940312
Аноним 26/03/20 Чтв 22:58:20 1643589313
Аноним 27/03/20 Птн 00:38:21 1643644314
>>1642940
> Опыт программирования на таких языках как ... Haskell
Лол
Аноним 27/03/20 Птн 07:56:59 1643686315
>>1643644
Ещё есть вакансия на руби, где в требованиях (или пожеланиях, не помню) указан опыт программирования на расте.
Аноним 27/03/20 Птн 10:06:12 1643727316
>>1643589
Не, прост вакуха интересная.
Кто-нибудь апплаился уже нан неё?
Я дотнето-питоно-энтерпразо-блядь, мне не по чину, а тут такие-то требования и задачи, аж ухх.
Аноним 28/03/20 Суб 11:04:21 1644415317
Получить значение из хэшмэп в нормальном языке:
m := scores["Yellow"]

В расте:
let m = scores[&"Yellow".to_string()];
Аноним 28/03/20 Суб 14:27:08 1644525318
>>1644415
>в нормальном языке
> :=
Аноним 28/03/20 Суб 14:29:56 1644527319
>>1642940
>Уверенное знание Rust (опыт коммерческой разработки от 2 лет);
лiл!
Аноним 28/03/20 Суб 15:54:00 1644581320
>>1644415
Язык всё еще относительно молодой
Когда допилят сборщик мусора можно будет писать не так
Аноним 28/03/20 Суб 18:36:03 1644747321
Аноним 28/03/20 Суб 18:39:42 1644751322
Аноним 28/03/20 Суб 22:21:32 1644937323
Аноним 29/03/20 Вск 00:14:10 1645015324
Аноним 29/03/20 Вск 22:10:25 1645855325
Насколько русский растбук отстает в развитии актуальности? С английским нет проблем, но я не люблю на иностранных языках читать.
Аноним 29/03/20 Вск 23:48:57 1645908326
>>1645015
Ну ты ведь только доказал, что сделал хуйню, и естественно компилятор не может за тебя понять, как ее интерпретировать. У тебя там в ключе хуйня в виде &String (хорошо, если один уровень ссылок). Так что ССЗБ, да.
Аноним 30/03/20 Пнд 06:40:23 1646016327
Аноним 30/03/20 Пнд 10:28:47 1646046328
>>1646016
Ты крутой. Хочу тоже когда-нибудь все это понимать.

мимо-ридонли-анон
Аноним 30/03/20 Пнд 13:04:40 1646124329
Аноним 30/03/20 Пнд 16:33:41 1646258330
Аноним 30/03/20 Пнд 18:34:00 1646353331
>>1646258
Это не в конструкциях дело, а в том, что Rust автоматом дереференсит объекты для вызова методов. Для сравнения у нас есть трейт std::cmp::Ord, и для сравнения a и b вызывается Ord::cmp(a, b). Тут-то и происходит дереференс.

В Rust Reference расписано подробнее: https://doc.rust-lang.org/reference/expressions/method-call-expr.html

Если очень хочется сравнить ссылки, обратись к ptr:eq.
Аноним 31/03/20 Втр 06:52:30 1646708332
Аноним 01/04/20 Срд 09:25:25 1647824333
>>1645855
Доки тоже русские читаешь?
Аноним 01/04/20 Срд 14:48:06 1648013334
>>1646353
Спасибо. Странно, что для такого строгого языка как rust сделали при сравнениях неявный автодереференс. То ли дело https://play.golang.org/p/TSjp4-HumQc
Аноним 01/04/20 Срд 15:36:11 1648039335
Screenshot20200[...].png (51Кб, 588x718)
588x718
>>1648013
Ты представляешь, как будешь вызывать функции для Arc<Mutex<Box<T>>>? (T).do_something().

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

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

В то же время, посмотри на пример пикрелейтед. Методы для структуры вызываются независимо от того, как они объявлены (
rect там просто является индикатором сайд-эффектов при вызове метода) и независимо от того, по структуре r ты его вызываешь или по ссылке на нее rp. Тут тоже автодереференс работает во всю, ты просто ищешь его в том единственном месте, где в Go его нет по принципиальным причинам.
Аноним 01/04/20 Срд 15:38:51 1648040336
>>1648039
Забыл, что звездочки съедает парсер.

> (T).do_something()
(✱✱✱T).do_something().

> (rect там просто является индикатором сайд-эффектов при вызове метода)
✱rect
Аноним 01/04/20 Срд 23:23:44 1648308337
>>1647824
Если актуальные - да. Если нет - нет.
Мне кажется, что из вопроса это было очевидно.
Аноним 02/04/20 Чтв 02:21:12 1648367338
>>1648039
> Arc<Mutex<Box<T>>>?
Box не нужно, ибо Mutex: ?Sized
Аноним 02/04/20 Чтв 16:23:29 1648573339
Анон, поясни за AtomicPtr.
Что-то я не пойму, а что если один из потоков уже вовсю юзает к нему доступ - что будет со вторым? Никакого Result или Option там нет, возвращается сразу указатель. Или оно само ждёт?
Аноним 02/04/20 Чтв 20:26:41 1648728340
>>1648573
Там атомарны операции над указателем, а не сам указатель.
02/04/20 Чтв 21:02:04 1648750341
Аноним 03/04/20 Птн 12:00:10 1649171342
>>1648750
Нет, смотри:
AtomicPtr - это просто кучка байтов, которые могут использоваться как адрес.
И когда ты изменяешь эту конкретную кучку байтов, зовущуюся AtomicPtr, она изменяется атомарно. Данные по этому указателю обычные и изменяются обычно, а не атомарно (кроме случаев, когда твой указатель указывает на другой атомик, но это другая история).

>>1648573
Никто ничего не ждёт. Хочешь атомарный доступ к данным по указателю - юзай Mutex или RwLock (или ^const AtomicUsize, если указатель нужен, а не ссылка, как &AtomicUsize, если тебе надо хранить маленькую цифру, а не большой слайс).
Аноним 06/04/20 Пнд 21:17:34 1652129343
>>1602965 (OP)
а што случилось с православной версией расбука?
Аноним 06/04/20 Пнд 22:17:41 1652192344
Аноним 06/04/20 Пнд 22:24:42 1652205345
>>1652192
она еще жива или всё?
Аноним 09/04/20 Чтв 13:50:25 1654040346
\тест\
Аноним 10/04/20 Птн 10:22:46 1654596347
Привет аноны, изучил раст по офф.книге, но чувствую не хватает знаний. Что еще читать?
Аноним 10/04/20 Птн 10:32:04 1654597348
исходники стандартной либы
Аноним 10/04/20 Птн 10:33:51 1654602349
>>1618230
И что заместо указателя возвращать?
Аноним 10/04/20 Птн 13:14:39 1654712350
>>1654602
Ну, смари:
1. У тебя прописан лайфтайм для функции, то ты и возвращаешь с энтим лайфтаймом. Но это может быть немного муторно.
2. Ты передал в функцию вектор и возвращаешь указатель на элемент этого вектора. Годится не для каждого случая.
3. Возвращаешь с &'static - но это немного некошерно, как я понимаю, так можно сделать утечку. (более опытные аноны пусть поправят)
4. Самое лучшее - стараться писать так, чтобы функция возвращала прям-таки сам объект. То есть, создавала какие-то новые данные и их возвращала. Тогда никаких вопросов к ней не будет.
Аноним 10/04/20 Птн 17:37:55 1654933351
Аноним 10/04/20 Птн 18:00:23 1654957352
>>1654712
Разве четвёртый вариант не будет медленее из-за копирования?
Аноним 10/04/20 Птн 20:43:36 1655048353
>>1654957
Если дереференсить по полученной ссылке, то может и будет. А если ты создал объект, то никакого перемещения в памяти не будет.
Аноним 10/04/20 Птн 23:08:41 1655129354
>>1654597

И как понять, что в этом аду происходит?
Аноним 11/04/20 Суб 05:35:43 1655329355
>>1655129
Да не, в расте стандартную либу ещё читать можно. Про всё говорить не могу, но некоторые вещи точно.
Аноним 11/04/20 Суб 14:58:00 1655688356
>>1655129
В расте как раз никакого ада и никаких препроцессоров, только макросы иногда странные, но в стдлибе все макросы простые если не по коду, то хотя бы по логике. А ещё там везде охуенная документация.
Зайди в МВП тред, там ссылка на гитхаб со всякой сранью по крестам. Но тебе кресты не нужны, только часть про то, как работают процессоры и RAM. Видосов там вроде на час-два всего. После этого уже становится понятно, что такое указатели, биты и прочая срань.
Аноним 12/04/20 Вск 11:21:54 1656290357
>>1602965 (OP)
Как там раст поживает?
Возможно ли найти работу? Или лучше сделать упор на С++?
Аноним 12/04/20 Вск 11:31:21 1656307358
>>1656290
>Как там раст поживает?
Хорошо
>сделать упор на С++?
>Возможно ли найти работу?
Ты же никогда не работавший студент?
Аноним 12/04/20 Вск 20:02:17 1656644359
Че пацаны, когда свергаем с трона дедушек типа Си и крестов и овладеваем царством системного программирования?
Аноним 12/04/20 Вск 20:14:40 1656650360
>>1656644
Когда что-нибудь решат с целым сонмом проблем. Например, линуксы не могут писать на расте, потому что нет хотя бы полустабильного ABI, а новые версии раста выходят чаще, чем новые версии линупса.
Есть и другое. Раст хорош, но пока что с легаси слезать никто не хочет, потому что раст сложный и учить его дорого.
Аноним 12/04/20 Вск 20:16:06 1656651361
>>1656644
>дедушек типа Си
цэ никада, его нечем заменить, цэпэпэ возможно но не в ближайшем будущем
Аноним 12/04/20 Вск 20:20:23 1656652362
>>1656644
> дедушек типа Си и крестов
Им нахуй ваши безопасные языки не нужны. Няшные UB и use-after-free - самое лучшее что случалось в IT.
Аноним 12/04/20 Вск 20:22:08 1656653363
>>1656651
А не наоборот? Кресты - те же Си по производительности, но с мегакрутым STL, где есть дохуя структур данных и нулевых по стоимости абстракций, ООП и умные указатели, позвляющие минимизировать шансы иметь уязвимости типа use-after-free, nullptr dereference, double free.
Я считаю, что Сишка уступит расту лет через 10, но кресты несвергаемы в ближайшие лет 50 так точно
Аноним 12/04/20 Вск 20:24:37 1656655364
>>1656652
Кому им? Безопасники потеряют хлеб, по крайней мере в лоу-лвл бинарщине, да, но компаниям только в плюс, их хотя бы по одному вектору перестанут ебать.
Аноним 12/04/20 Вск 20:25:54 1656656365
>>1656655
Сам Линус (лично) заявил, что UB - это норма и язык без UB - говно.
Аноним 12/04/20 Вск 20:27:59 1656657366
>>1656653
У STL самая большая проблема - это переусложнённость. И одна из причин - эксепшоны (которые, что смешное, любой кого волнует перформанс полностью отключают), которые нужно учитывать. Отсюда некоторые коллекции медленней чем могли бы быть.
Аноним 12/04/20 Вск 20:30:18 1656659367
>>1656656
От Линуса зависит разве что будущее Линукса, но никак не будущее всего мира программирования. То, что Линукс на раст перепишут только через труп Торвальдса - это и ежу понятно. Но я говорю глобально о мире. В итоге через 10 лет максимум что останется - это суперсложные дыры в пространстве ядра, юзерспейс должен семимильными шагами перестать юзать дырявые япы. Какой от них смысл, если раст быстрый как си и плюсы, но безопасен и его код нельзя взломать по вектору ошибок с памятью?
Аноним 12/04/20 Вск 20:31:34 1656660368
>>1656653
ты давно видел чтобы на чистом цэ писали? а вот где то заткнуть им дырку он минималистично идеален, кресты сложные и неговнокодить на них тяжело, надо дохуя знать чтоб ненаделать пиздеца, я например понимаю что я их не настолько знаю чтоб увидеть эти подводные камни.
Аноним 12/04/20 Вск 20:35:39 1656662369
>>1656660
> ты давно видел чтобы на чистом цэ писали?
Ололо, прошивки для любой эмбедщины, драйвера (Линукс, здарова), рилтайм, средства виртуализации типа гипервизоров. Там почти 100%ый Си код
Аноним 12/04/20 Вск 20:37:10 1656663370
>>1656662
да да про эмбедед я уж вспомнил когда отправил
ну а кроме не так уж часто
>>1656659
> юзерспейс должен семимильными шагами перестать юзать дырявые япы
ха
Аноним 12/04/20 Вск 20:59:18 1656670371
>>1656663
> ну а кроме не так уж часто
Братан, это ОГРОМНЫЙ кусок рынка, который с развитием интернета вещей только растет в геометрической прогрессии, алло. К тому же, драйвера все же пишут чаще на чистом Си, и на винду, и на Линукс.
> ха
Какой смысл подвергать себя риску, особенно если это софт, который крутится на сервере и открыт ВСЕМУ МАТЬ ЕГО ИНТЕРНЕТУ, если можно без потерь юзать яп, у которого неуязвимая память? Где логика блять?
Аноним 12/04/20 Вск 21:19:38 1656677372
15865958665810.jpg (23Кб, 400x290)
400x290
>>1656670
>Где логика блять
>погромирование
ха ха
Аноним 12/04/20 Вск 21:25:52 1656679373
>>1656644
Для начала не мешало бы аллокаторы доделать. Да и константные генерики тоже (без них работать с массивами - боль). Обе фичи в зачаточном состоянии и вряд ли до следующего года будут доделаны.
Аноним 12/04/20 Вск 22:09:42 1656690374
>>1656679
Раст, может быть и такой же быстрый, как плюсы, но точно не как С. Вернее сказать, идиоматичный код на Расте и плюсах всегда будет медленнее сишного, потому что не бывает на самом деле никаких зерокостабсракшнс: просто в плюсах и Расте обычно делают выбор в сторону понятности/выразительности без (как правило) существенной потери производительности. И это хорошо, потому что писать на сях - удовольствие разве что для гурманов (читай: ебанутых) типа Торвальдса.
Аноним 12/04/20 Вск 22:51:21 1656703375
>>1656690
В отличии от C++ в расте "зиро кост" имеет именно смысл "такой же быстрый, как и оптимизированная версия написанная вручную" (а не "нет оверхеда если фича не используется"). Те же асинхронные функции в расте например в ночнушке уже могут полностью оптимизироваться, как будто асинхронщины нет вообще: https://rust.godbolt.org/z/jL_5sC
Аноним 12/04/20 Вск 23:22:26 1656713376
Аноним 13/04/20 Пнд 00:09:25 1656729377
>>1656703
Эти зирокост фантазии соответствуют реальности чуть чаще, чем никогда. Речь даже про более простые вещи, чем асинхронность.
Аноним 13/04/20 Пнд 00:10:56 1656730378
>>1656703
В с++ тоже (так-то этот маркетинговый прикол Страуструп сочинил)
Аноним 13/04/20 Пнд 00:14:18 1656731379
>>1656729
Ты хоть один баг-репорт заполнил где конкретная абстракция выполнялась медленней чем код без неё? Или речь про твои собственные фантазии?
Аноним 13/04/20 Пнд 00:22:19 1656736380
>>1656731
Я нет, но таких репортов и так полно висит.
Аноним 13/04/20 Пнд 00:25:08 1656738381
>>1656736
Именно. Потому что они воспринимаются как баги и как отсутствие нужных оптимизаций, а не как фичи. Например раст до сих пор не умеет в NRVO (которому С++ научился лет двенадцать назад) из-за чего куча кода с Box работает медленней чем могла бы (особенно если LLVM не сообразит соптимизировать).
Аноним 13/04/20 Пнд 07:45:42 1656815382
>>1656307
>Ты же никогда не работавший студент?
Практически, да. Делал сайты и прочую херню.
Но в последнее время подсел на плюса и раст. Вот и думаю профессионально заняться, всяко лучше чем в css анимации пилить.
Аноним 13/04/20 Пнд 12:34:24 1656942383
>>1656656
В чём профит то? Есть ссылка на подробности?
Аноним 13/04/20 Пнд 13:13:26 1656966384
>>1656942
когда что то не падает это неинтересно
Аноним 13/04/20 Пнд 15:45:47 1657061385
>>1656307
>на расте нет вакансий
>ДА ТЫ ЖЕ СТУДЕНТ)))
заебись логика
Аноним 13/04/20 Пнд 18:25:08 1657197386
>>1656966
Таких бы в строители.
Аноним 13/04/20 Пнд 21:09:55 1657328387
Выделение063.png (91Кб, 1670x288)
1670x288
Анон, хуле ему надо? Почему всё так ебано и неочевидно?
Я замудохался ошибки к единому типу приводить, сука, а тут такое.
Суть - нужен асинхронный метод для трейта, ебать его в рот.
Аноним 13/04/20 Пнд 21:09:55 1657329388
>>1657197
он решил уберечь мир от своего архитектурного гения
Аноним 13/04/20 Пнд 21:20:00 1657335389
>>1657328
> нужен асинхронный метод для трейта
Раст такого изкаробки пока не поддерживает (и в ближайшее время не будет). Тут только костыль использовать: https://crates.io/crates/async-trait
Аноним 14/04/20 Втр 19:59:16 1657939390
Поделитесь ссылкой на перевод главы про макросы (19.5) из растбука.
Аноним 14/04/20 Втр 20:44:37 1657969391
>>1657939
прочитай в оригинале она не сложная
Аноним 15/04/20 Срд 06:53:43 1658161392
>>1657061
Ладно, буду плюса задрить
Аноним 15/04/20 Срд 07:22:24 1658168393
>>1657061
Чего можно создать/допилить полезного на расте?
Аноним 15/04/20 Срд 07:24:18 1658169394
>>1602965 (OP)
Чего можно создать/допилить полезного на расте?
Аноним 15/04/20 Срд 08:08:11 1658178395
>>1658168
>>1658169
Дохуя всего.
1. Не все нужные либы написаны, не для всего есть биндинги.
2. В том, что написано, куча недостающего функционала. Тот же Image не умеет 16-бит png схоронять.
3. Очень многое из написанного заброшено и устарело. Я вот открыл тут для себя swagger, OpenApi и это вот всё. Для 2.0 биндинги генератора основаны на старой версии tokio и hyper (да и сами биндинги неполные), для 3.0 вообще ни хуя нет - сам пишу может здесь покажу, как доделаю. Или попрошу помощи, если не осилю
Аноним 15/04/20 Срд 08:09:09 1658179396
Короче, ты лучше начни писать что-нибудь своё - а там уже столкнёшься с кучей недоработок в сторонних крейтах. Вот и доработаешь по ходу дуела.
Аноним 15/04/20 Срд 18:11:26 1658581397
Мне сказали что Rust мертвый язык. Если нет, какие проекты на нём распространены и более востребованы?
Аноним 15/04/20 Срд 18:14:06 1658583398
>>1658581
Ну раз сказали, что всё. Опровергать бесполезно.
Аноним 15/04/20 Срд 18:56:50 1658605399
image.png (13Кб, 528x75)
528x75
ПАЧАЛОСЬ
Аноним 15/04/20 Срд 19:04:35 1658609400
Аноним 15/04/20 Срд 19:18:14 1658618401
>>1658605
> GUI на раст
> Orbtk
> 5000 р
Что-то мало. Не знаю насколько простое это приложение, но писать гуй (даже на нормальных библиотеках/фреймворках) это почти всегда боль, даже если уже есть готовый бэкенд со всей бизнес-логикой. Особенно когда начинается ёбля с интернационализацией и (не дай бог) ацессибилити.
Аноним 15/04/20 Срд 19:35:54 1658622402
>>1658618
Если ебашить хкод+свифт, то довольно просто всё будет. Очень непонятно нахуя тут раст.
Аноним 15/04/20 Срд 19:40:04 1658623403
>>1658622
Там не просто раст, но и гуй для redoxos (ОС на расте), который находится в зачаточном состоянии.
Аноним 15/04/20 Срд 19:40:58 1658624404
>>1658622
>Очень непонятно нахуя тут лучший язык современности.
ТЕМ ВРЕМЕНЕМ ЗАКАЗОВ Разработать простое GUI приложение на Rust под MacOS (Orbtk) 1 ШТУКА
Разработать простое GUI приложение на Govno под MacOS (Orbtk) 0 ШТУК
Аноним 15/04/20 Срд 19:44:13 1658626405
>>1658624
>Govno
жужл будет держать
Аноним 15/04/20 Срд 19:51:42 1658630406
>>1658626
Не будет. Они от говна даже в своей фуксии откказались, потому что говно оказалось БЕЗ ЗАДАЧ. А для гуя у них флютер с дартом есть.
Аноним 15/04/20 Срд 19:57:14 1658633407
>>1658630
>флютер с дартом есть.
они этот флюгегехаймен пишут со скоростью что учебники выходить не успевают, неужели на столько говно что перепиливают постоянно
Аноним 15/04/20 Срд 19:57:17 1658634408
image.png (26Кб, 300x225)
300x225
>>1658626
>Govno
>жужл будет держать
Аноним 15/04/20 Срд 20:04:32 1658637409
>>1658633
Не знаю что они там пишут, но для десктопа и даже веба эта хуита никак релизнуться не может.
Аноним 15/04/20 Срд 20:05:13 1658639410
>>1658633
Дарт давно готов, ещё раньше го вылез вроде, но не уверен. Флаттером на телефонах они гуй рисуют, так что его всегда надо будет допиливать.
Аноним 15/04/20 Срд 21:16:55 1658662411
Аноны, есть такая замечательная штукень, как swagger, OpenApi, это вот всё. Кто не знает - позволяет генерить биндинги и документацию на основе декларативного описания апишечки.
Решил я, в связи с известными событиями, немного торгануть на бирже. Ну и автоматизировать немного, ессно на расте. Взялся я за неё и что вы думаете? У тинькова апишка для версии 3.0, а в swagger-gen модуль для раста только для версии 2.0.
Ну я, короче, промудохался пару дней и выкатил (вроде) рабочую версию для 3.0, отдельным модулем. Интересно кому такое?
Аноним 15/04/20 Срд 22:02:47 1658686412
>>1658662
И зачем это было делать на расте?
Аноним 15/04/20 Срд 22:08:48 1658690413
>>1658686
Го я не знаю, от жабы тошнит, питон слишком распиздяйский язык для финансовых утех есть опыт.
Аноним 15/04/20 Срд 22:16:50 1658694414
>>1658662
я патологический неудачник для игор в этом казино, но идея интересная
Аноним 15/04/20 Срд 22:21:34 1658698415
>>1658690
И что прямо реально вот эту вебную парашу можно легко на расте делать?

inb4 поставил везде Clone, Copy и делаешь
Аноним 15/04/20 Срд 22:37:35 1658715416
>>1658698
А там ничего вебного, апишечка же и всё. Шлёшь запрос, получаешь ответ, десериализуешь - дальше работаешь со своей структурой. Если надо что-то заслать - сериализуешь структуру и также пакуешь в запрос.

OpenApi охуенная штука, позволяет просто набросать описание апишечки и по нему генерить клиент и сервер (в серверную часть я не вдавался).
Аноним 16/04/20 Чтв 00:05:35 1658793417
Аноним 16/04/20 Чтв 00:16:23 1658799418
Аноним 16/04/20 Чтв 02:17:08 1658833419
>>1658799
Это бред неосилятора. Ещё и раст опустил.
Аноним 16/04/20 Чтв 02:40:35 1658835420
Мне нужно всего лишь получить содержимое определённого URL (с указанием юзер-агента при коннекте), чтобы потом работать с этим содержимым в виде текста. Подскажите наиболее минималистичную библиотеку для такого, а то в инете многие советуют монструозный reqwest.
Аноним 16/04/20 Чтв 07:32:13 1658862421
downsyndromemed[...].jpg (15Кб, 356x237)
356x237
Аноним 16/04/20 Чтв 08:29:05 1658869422
[[package]]
name = "reqwest"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02b81e49ddec5109a9dcfc5f2a317ff53377c915e9ae9d4f2fb50914b85614e2"
dependencies = [
"base64",
"bytes",
"encoding_rs",
"futures-core",
"futures-util",
"http",
"http-body",
"hyper",
"hyper-tls",
"js-sys",
"lazy_static",
"log",
"mime",
"mime_guess",
"native-tls",
"percent-encoding",
"pin-project-lite",
"serde",
"serde_urlencoded",
"time",
"tokio",
"tokio-tls",
"url",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
"winreg",
]
Аноним 16/04/20 Чтв 09:47:27 1658884423
>>1658835
Делается за пару минут при поможи жопаскрипта или петухона, зачем тебе из раста по мухам стрелять?
Аноним 16/04/20 Чтв 09:54:33 1658887424
>>1658869
Используй тогда hyper, он относительно простой, зависимостей в пару раз меньше.
Аноним 16/04/20 Чтв 12:19:40 1658948425
Аноним 16/04/20 Чтв 12:33:42 1658960426
>>1658715
На чём делал hyper/serde?

>>1658835
>Мне нужно всего лишь получить содержимое определённого URL
Либа должна
>уметь парсить http
>при connect уметь в tls
>быть ассинхронной
Я ничего не забыл? Поэтому у тебя любой reqwest будет такой "распухший".

>>1658887
Разработчики hyper рекомендуют использовать reqwest, если тебе у тебя простой план использования.
Аноним 16/04/20 Чтв 13:02:00 1658971427
>>1658581
Никакие. Все языки мертвые, кроме джаваскрипта.
Аноним 16/04/20 Чтв 13:09:02 1658978428
>>1658971
мне вот интересно с какого перепугу его пихают везде там сам дизайн языка неоч
Аноним 16/04/20 Чтв 13:19:09 1658982429
>>1658978
Потому что вы все тупое быдло и ничего не смыслите в дизайне языков.
Аноним 16/04/20 Чтв 13:20:12 1658984430
>>1658978
Один язык, один рантайм, один успех.
Аноним 16/04/20 Чтв 13:49:11 1659008431
>>1658833
Я, кстати, с пятнадцатого года на Go и Python писал, и сейчас, изучая Rust рывками в свободное время, понял, что на Rust мне почти заново надо учиться писать, как если бы я на Хаскель перепрыгнуть решил. Если тебе не тяжело, поясни конкретно, в чем я неосилятор.
Аноним 16/04/20 Чтв 14:04:17 1659033432
Аноним 16/04/20 Чтв 14:57:43 1659116433
>>1659008
Прямо в педивикии написанно про Borrow checker, да и про гц тоже.
Аноним 16/04/20 Чтв 14:58:46 1659118434
>>1658982
[1,9,5,7,2,11,26].sort() => [1,11,2,26,5,7,9]
Аноним 16/04/20 Чтв 15:05:39 1659130435
Выделение067.png (45Кб, 983x261)
983x261
>>1658960
>hyper/serde
Я за основу взял версию от 2.0, так она и была на этом самом. Подтянул там hyper к последней версии (из-за чего пытался в асинхронные трейты, забил и сделал block_on), заимплементил енумы (костыльно, пулл-риквесты вэлкам), добавил сер-десереилизацию для времени.
Юзать как-то так:
https://github.com/swagger-api/swagger-codegen/tree/3.0.0/
>mvn clean package
https://github.com/inferrna/rust-swagger-codegen_v3
>mvn clean package
потом
>java -cp rust-swagger-codegen_v3/target/rust-swagger-codegen-1.0.0.jar:swagger-codegen/modules/swagger-codegen-cli/target/swagger-codegen-cli.jar io.swagger.codegen.v3.cli.SwaggerCodegen generate -l rust -i your_swagger.yaml -o your_client

Всё, крейт в your_client почти готов, нужно только руцками прописать версию и название. Я проверял на Тинькове - работает, пок что, правда, единственный запрос проверял. Одна тонкость - для поддержки ssl пока нужно немного попотеть - пикрил (потом можно перенести в саму либу, нужно только задетектить схему).
Работы там дохрена, официальная версия для 2.0 оказалась ещё хуже моей.
Аноним 16/04/20 Чтв 16:44:42 1659224436
Аноним 16/04/20 Чтв 18:06:47 1659312437
>>1659130
Это в idea так по-умолчанию типы прописываются?
Аноним 16/04/20 Чтв 18:10:38 1659321438
>>1659116
И при чем тут это? Ты явно неправильно меня понял.
Аноним 16/04/20 Чтв 18:35:05 1659342439
Аноним 16/04/20 Чтв 22:54:54 1659556440
Аноним 16/04/20 Чтв 23:10:53 1659564441
>>1659556
> Зачем это говно вообще городить?
По большей части чтоб не писать return Ok(govno); (или Ok(govno) в конце) для выхода из функции, а просто return govno;/govno как будто функция возвращает не Result<Govno, _> а просто Govno.
Аноним 16/04/20 Чтв 23:32:31 1659580442
Аноним 16/04/20 Чтв 23:41:01 1659587443
>>1659580
Удобна же (на самом деле было бы неплохо, особенно в функциях возвращающих Result<(), _>, где с ok-wrapping можно ничего не возвращать вообще). Ты ещё не видел свидетелей отсутствия точки с запятой у которых точка с запятой в конце выражений сразу делает язык неюзабельным говном.
Аноним 17/04/20 Птн 00:09:35 1659605444
>>1659587
>Ты ещё не видел свидетелей отсутствия точки с запятой у которых точка с запятой в конце выражений сразу делает язык неюзабельным говном.
ну я сам люблю в кожуре поковырятся, но к точкам отношусь нейтрально
>Удобна же (на самом деле было бы неплохо, особенно в функциях возвращающих Result<(), _>, где с ok-wrapping можно ничего не возвращать вообще).
руст и так местами переусложнен, а если начать добавлять исключения в одних функциях так в других не так, будет пиздец.
Аноним 17/04/20 Птн 00:22:47 1659612445
.PNG (64Кб, 1231x950)
1231x950
>>1659605
> руст и так местами переусложнен, а если начать добавлять исключения в одних функциях так в других не так, будет пиздец.
Так это уже сейчас можно сделать макросами (более того ты можешь писать зашифрованный код и расшифровывать его во время компиляции при помощи макросов - https://github.com/matklad/proc-caesar - пикрил). И пока что делать подобные функции даже в планах нету. Только специальные try-блоки, плюс трейт Try, чтобы можно было использовать ok-wrapping (да и оператор ?) с любым типом, а не только Option и Result, которые сейчас немношк попахивают магией.
Аноним 17/04/20 Птн 00:30:45 1659622446
>>1659612
первое правило макросов не используй макросы(с) лисп
резалт то магией не пахнет
Аноним 17/04/20 Птн 00:33:42 1659625447
>>1659622
> резалт то магией не пахнет
Я про оператор ?, который работает только с Result и Option. После стабилизации трейта Try он будет работать с любым типом, который имплементирует этот трейт и "магия" внитри Result и Option будет заменена на имплементацию этого трейта (хотя скорее всего ? уже работает через этот трейт и просто в стабильном расте ты не cможешь сделать свой тип, чтоб он имплементировал его).
Аноним 17/04/20 Птн 00:47:00 1659632448
>>1658581
Скорее мертворожденный. Он служит якобы будущей заменой Си и крестов, но на деле временный выпердыш, так как он решает какую-то микропроблему топовых системных япов (Сей и крестов), и то частично, а не полностью. Засим, недостаточно причин для тотального перехода на Раст, тем более на уровне продакшена. Обрастет костылями, биндингами на Си (еще больше чем сейчас) и захлебнется, как и предыдущие мамкины убийцы сикрестов.
Аноним 17/04/20 Птн 09:21:32 1659731449
>>1658948
Вот это подходит. Спасибо.
Аноним 17/04/20 Птн 09:33:41 1659738450
>>1659632
>топовых системных япов
а есть системщина кроме си/++
Аноним 17/04/20 Птн 10:28:21 1659773451
Аноним 17/04/20 Птн 12:02:15 1659882452
>>1659632
Ну почему, джава и шарп тоже задумывались убийцами крестов и таки преуспели в этом - теперь на крестах пишут только системщину.