Size: a a a

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

2020 August 09

Э

Эрик in Rust — русскоговорящее сообществo
Emmanuel Goldstein
У меня есть слайс (на самом деле, даже вектор) и я хочу в нём применить функцию Fn(T) -> T на одном из элементов
Как-то так:
let item = ManuallyDrop::new(ptr::read(&mut vec[idx]));

f(item);
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Эрик
Как-то так:
let item = ManuallyDrop::new(ptr::read(&mut vec[idx]));

f(item);
У нас с тобой разные представления о том, что такое красиво :)
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вообще, в идеальном варианте должен быть Fn(&mut T), а не вот это вот всё.
источник

EG

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

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Хочу красивое апи на иммутабельных типах т_т
источник

EG

Emmanuel Goldstein 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
Окей, мне нужен HTTP-сервер, websocket-сервер и разумный интерфейс к асинхронному запуску других программ.
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Окей, мне нужен HTTP-сервер, websocket-сервер и разумный интерфейс к асинхронному запуску других программ.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Ы, всё ещё хуже.
Если я хочу передвинуть важный элемент, не зная его индекса (но зная позицию на поле), то мне придётся сначала найти его в списке важных элементов
Для этого нужно внутри элемента держать его индекс в векторе важных элементов, что запутывает внутренний стейт ещё больше
источник

EG

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

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Да это ж хаскелль.
ну пока в идрис не портируют сервант (или ты не желаешь этим заняться) придется чутка даунгрейднуться
источник

Э

Эрик in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Вообще, хочу совета по «архитектуре»
У меня есть прямоугольное клетчатое поле, на котором находятся некие объекты (энум). Один из вариантов энума гораздо важнее, чем другие, я хочу уметь по нему итерироваться быстро.
struct Field {
 all: RawField,
 important: Vec<FieldIdx>,
}
источник

Э

Эрик in Rust — русскоговорящее сообществo
И когда в RawField меняешь, меняй и в векторе.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Эрик
struct Field {
 all: RawField,
 important: Vec<FieldIdx>,
}
Это создаёт все те проблемы, которые я описал
источник

(L

(((Mike Lubinets))) in Rust — русскоговорящее сообществo
Alex Zhukovsky
ну пока в идрис не портируют сервант (или ты не желаешь этим заняться) придется чутка даунгрейднуться
Оставайтесь в рамках топика, пожалуйста
источник

Э

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

Э

Эрик in Rust — русскоговорящее сообществo
Изменил поле на важное — push нового индекса в вектор.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Поменял одно из важных полей местами — поменял в векторе.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну или на BTreeSet important делай, если скорость так важна.
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
(((Mike Lubinets)))
Оставайтесь в рамках топика, пожалуйста
речь шла про иммутабельное красивое апи. В расте или то, или другое, а часто и ни того, ни другого. Не вижу ничего плохого в апи с &mut, но вот какой вопросы был такой ответ
источник