Size: a a a

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

2020 August 09

t

this is not mrklf in Rust — русскоговорящее сообществo
никак, актикс сам умеет в мультитред
источник

M

Mnwa in Rust — русскоговорящее сообществo
А как это работает? Предположим у меня есть некий актор, который спавнит много тасок. Эти таски будут исполняться в тредпуле?
источник

BD

Berkus Decker in Rust — русскоговорящее сообществo
Denis
ещё немного поколдую и зашлю на ревью
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
У меня есть слайс (на самом деле, даже вектор) и я хочу в нём применить функцию Fn(T) -> T на одном из элементов
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Не могу понять, как это красиво (без клонирования и замены на dummy-элемент) это сделать
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Крейт replace-with, технически, решает проблему, но очень уж некрасиво.
источник

В

Вафель in Rust — русскоговорящее сообществo
крейт take_mut? X)
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Вообще, хочу совета по «архитектуре»
У меня есть прямоугольное клетчатое поле, на котором находятся некие объекты (энум). Один из вариантов энума гораздо важнее, чем другие, я хочу уметь по нему итерироваться быстро.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Очевидный вариант — хранить отдельный вектор с индексами всех «важных» элементов. Но так легко запутаться в логике.
Кроме того, при получении важного элемента по его индексу возникнет такая неприятная фигня:
let pos = important_elems[idx];
let obj = match field[pos] {
   Important(obj) => obj,
   _ => unreachable!("something unimportant found"),
}
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Элементы много перемещаются по полю, поддерживать их местоположения в двух местах — геморрой
источник

KR

Kai Ren in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Очевидный вариант — хранить отдельный вектор с индексами всех «важных» элементов. Но так легко запутаться в логике.
Кроме того, при получении важного элемента по его индексу возникнет такая неприятная фигня:
let pos = important_elems[idx];
let obj = match field[pos] {
   Important(obj) => obj,
   _ => unreachable!("something unimportant found"),
}
Если спрятать под-капот?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Kai Ren
Если спрятать под-капот?
Ну, под капотом будет эта проверка с паникой
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Другой вариант — хранить важные элементы в арках
источник

BD

Berkus Decker in Rust — русскоговорящее сообществo
а зачем, если у тебя инвариант что в этом индексе всегда правильный важный элемент?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Это ощущается немного неидиоматично, но принципиалльной проблемы не вижу
источник

KR

Kai Ren in Rust — русскоговорящее сообществo
Будет, но снаружи будет уже удобнее использовать.
источник

BD

Berkus Decker in Rust — русскоговорящее сообществo
ты ж все мутации будешь делать через этот инторфейс
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Kai Ren
Будет, но снаружи будет уже удобнее использовать.
Это понятно, что наружу я это не свечу
Вопрос в том, как это сделать удобнее внутри
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Но внутрь арка придётся пихать какой-нибудь interior mutability (в моём случае хватит Cell), что даст кривые, неприятные типы
источник

EG

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