Mam strukturę danych, która może być reprezentowana jako jednokierunkowy wykres między niektórymi strukturami powiązanymi z obiektami łącza, ponieważ łącza zawierają metadane.Implementacja graficznej struktury danych w Rust
Wygląda to mniej więcej tak:
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,
}
Cała konstrukcja musi być zmienny, ponieważ muszę mieć możliwość dodawania i usuwania linków i zasobów w czasie wykonywania. Z tego powodu nie mogę użyć normalnego modelu życia i powiązać zasoby z czasem życia nadrzędnej struktury.
Rozumiem, że potrzebuję to "choose my own guarantee" wybierając odpowiedni typ, ale nie jestem pewien, jaki jest najlepszy sposób rozwiązania tego problemu.
Dodaję i usuwam wiele węzłów, a aplikacja jest procesem serwera, więc problemem są wycieki pamięci. Czy znasz inne rozwiązanie? W międzyczasie przyjrzę się drugiej odpowiedzi. – Lorenz
@ Aragon0: Dodałem kolejny pomysł na projekt, w którym oddzielanie zasobu i odniesienia do innych (bez użycia wskaźnika bezpośredniego) wymaga więcej księgowości, ale jest bezpieczny. –
To wygląda na dobry pomysł! Mogę sobie poradzić z większą księgowością, o ile wszystko jest bezpieczne i rozsądnie szybkie. – Lorenz