Size: a a a

Rust — русскоговорящее сообществo

2020 September 29

DF

Dollar Føølish in Rust — русскоговорящее сообществo
Даже на арене
источник

П

Пашечка in Rust — русскоговорящее сообществo
Dollar Føølish
Лл бесполезный контейнер
Редко полезный*
источник

R

Roman in Rust — русскоговорящее сообществo
Vec::retain удаляет элементы при итерации. Тебе надо то же самое, но забирать их себе. Силою unsafe лего сделать O(1) удаление и вставку в конец на векторе
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
*Полезный в некоем ограниченном количестве ситуаций
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Например, в функциональных языках
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
Ограниченный гетерогенными списками в ядре
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Или в системе типов
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
За фя не скажу
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Roman
Vec::retain удаляет элементы при итерации. Тебе надо то же самое, но забирать их себе. Силою unsafe лего сделать O(1) удаление и вставку в конец на векторе
Это называется (нестабильный) drain_filter, да.

У меня пока идея поиграть в DrainFilter руками, если что
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Или в ядре
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Вообще с точки зрения big-O, проблему, кажется, решит обычный linked list + стек свободных аллокаций
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Но скорость итерации просядет, да
источник

MF

Max Frai in Rust — русскоговорящее сообществo
`
       println!("All reviews length: {}", all_reviews.len());

       let mut iterator = 0;
       for mut review in all_reviews {
           println!("Iterator: {}", iterator);
           iterator += 1;
       }
``
Как может быть, что iterator только до 11 доходит, но первая строчка выводит, что длина вктора 170
источник

П

Пашечка in Rust — русскоговорящее сообществo
А вообще, вот вам хохма про оптимизейшн: у нас в кодах (цпп) есть собственный аналог QVariant. Вся его работа сводится к тому, чтобы положить значение в стримбуфер, а потом вытащить. Догадываетесь как это круто и быстро работает? Х)
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Вообще с точки зрения big-O, проблему, кажется, решит обычный linked list + стек свободных аллокаций
Когда нужно создать новый элемент списка — берём верхний кусок памяти со стека и кладём элемент в него
Когда удаляем — кладём обратно на стек
Если стек слишком большой, то очищаем его, если слишком маленький, то увеличиваем в два раза
Стек в данной задаче эмулируется обычным вектором
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Пашечка
А вообще, вот вам хохма про оптимизейшн: у нас в кодах (цпп) есть собственный аналог QVariant. Вся его работа сводится к тому, чтобы положить значение в стримбуфер, а потом вытащить. Догадываетесь как это круто и быстро работает? Х)
Ничего не знаю, O(1)
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
Пашечка
А вообще, вот вам хохма про оптимизейшн: у нас в кодах (цпп) есть собственный аналог QVariant. Вся его работа сводится к тому, чтобы положить значение в стримбуфер, а потом вытащить. Догадываетесь как это круто и быстро работает? Х)
Это типа еражура такая? Как std::any?
источник

П

Пашечка in Rust — русскоговорящее сообществo
Dollar Føølish
Это типа еражура такая? Как std::any?
Честно, не совсем шарю за стд-эни, у нас всё ещё 11 стандарт и gcc 4.8
источник

П

Пашечка in Rust — русскоговорящее сообществo
Но вообще это больше похоже на std::variant, исходя из того что я читал про новые стандарты, которыми нам пользоваться низя :(
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
Значит с дискриминатором
источник