172 похожих чатов

Я никак не могу найти нормальный сбалансированный подход к казалось

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

Хочется манипулировать списком и не сойти с ума.
У нас есть пара вариантов как это сделать:

1. сделать структурку мутабельной и по-классике пихать туда новые данные, типа fn update(&mut self). Максимально простой подход со всеми вытекающими. Работает пока у нас один поток, иначе мы начинаем кушать кактус с Arc<Mutex<...>> и прочими прелестями

2. Использовать копи он врайт (так сказать функциональщина на пол шишечки), который ушатает производительность в ноль и сожрет все ресурсы в любом мало мальски работающем приложении https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=ddf9272edeee2f59d0ebf92d65dddbc5

3. взять помесь функциональщины и плюс съемулировать джаву или любой другой язык с GC.
То есть напихать вместо данных, ссылки на данные и тогда производительность пункта 2 хоть как-то улучшиться, только непонятно почему я корячусь и эмулирую джаву тогда? Зачем мне тогда все эти прелести без гарбадж коллектора?
struct Data {
list: Vec<Rc<Data>>
}
собственно на каждую вставку пересоздавать лист, только теперь из-за того что у нас ссылки, по идее должно быть подешевле в целом по больнице

4. Не извращаться, а взять наконец нормальные персистентные коллекции и писать в функциональном виде.

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

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

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

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

11 ответов

24 просмотра

1 - ну так каналы используй, чтобы с мутексами не мучатся; 4 - с растом такая история что те проблемы мутабельности, которые в чистой функциональщине решаются запретом оной, в расте решаются его системой типов

Mister Tomato- Автор вопроса
Александр
1 - ну так каналы используй, чтобы с мутексами не ...

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

Александр
1 - ну так каналы используй, чтобы с мутексами не ...

>системой типов Не, вообще не :D, она тут много менее мощная, чем в фпшках

Александр Ф. 🇷🇺
>системой типов Не, вообще не :D, она тут много ме...

тут нельзя определённо сказать более или менее, она другая, и для системного программирования с его большой императивностью, по идее, более подходящая

А что не так с мьютаксом?

Для многопоточного сценария можно посмотреть в сторону lock-free алгоритмов и структур данных Не нашел доклад, который мне запомнился больше всего, но вот другой https://youtu.be/XKODaZgKcnE?si=bkPd8HQs0_68oVu6

dj.maxus
Для многопоточного сценария можно посмотреть в сто...

Скорее всего уже есть крейты с lock-free контейнерами

dj.maxus
Для многопоточного сценария можно посмотреть в сто...

Вот! Очень понравился доклад https://youtu.be/Z-2siR9Ki84?si=h3GIvMQ9z3hTu9Gt

QSBR не пробовали?

Смотрел про Yoke?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта