This is just an exercise in rust. I knew that rust memory model makes graphs and circular references hard to implement, so I had to try it. A lot of stuff done through copying, so I don't think this implementation is particularly good or performant. Right now it is a "proper" version without any unsafe code. Maybe later I'll add alternative implementations with more direct memory manipulation to compare performance.