У меня есть структура данных, которая может быть представлена как однонаправленный граф между некоторыми структурами, связанными с объектами ссылок, потому что ссылки содержат метаданные.Реализация графоподобной структуры данных в Rust
Это выглядит примерно так:
struct StateMachine {
resources: Vec<Resource>,
links: Vec<Link>,
}
struct Resource {
kind: ResourceType,
// ...
}
enum LinkTarget {
ResourceList(Vec<&Resource>),
LabelSelector(HashMap<String, String>),
}
struct Link {
from: LinkTarget,
to: LinkTarget,
metadata: SomeMetadataStruct,
}
Вся структура должна быть изменяемым, потому что мне нужно, чтобы иметь возможность добавлять и удалять ссылки и ресурсы во время выполнения. Из-за этого я не могу использовать обычную модель времени жизни и привязывать ресурсы к жизни родительской структуры.
Я понимаю, что мне нужен to "choose my own guarantee", выбрав подходящий тип, но я не уверен, что это лучший способ решить эту проблему.
Я добавляю и удаляю множество узлов, и приложение является серверным процессом, поэтому проблема утечки памяти является проблемой. Вы знаете другое решение? Тем временем я посмотрю на другой ответ. – Lorenz
@ Aragon0: Я добавил еще одну конструктивную идею, где развязывание ресурса и ссылок на других (не используя прямой указатель), это требует большего объема бухгалтерского учета, но является безопасным. –
Это выглядит неплохо! Я могу справляться с большей бухгалтерией, если все это безопасно и достаточно быстро. – Lorenz