Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

A tree of Rc/Arc<T> is a tree of references, and is really no different than a Java or Python reference value, except that you'll have to do explicit .clone()s

Is it mutability that's tripping you up? Because that's the only gotcha I can think of. Yes, you won't get mutability of the content of those references unless you stick a RefCell or a Mutex inside them.



Yes! Mutability is what's tripping me up! That is not a minor detail!


You can get something like what you're used to a "traditional" language without compiler safeguards by using RefCell and .borrow_mut() on it. That will let you get past the compile-time borrow checks but will do runtime borrow checking and throw panic if more than one borrow happens at runtime.

It's verbose, but it's explicit, at least.

So:

  struct Node {
    parent: Rc<RefCell<Node>>,
    left: Option<Rc<RefCell<Node>>>,
    right Option<Rc<RefCell<Node>>>,
  }
and just off the top of my head it'd be something like

  {
    let my_parent = my_node.parent.borrow_mut();
    ... do stuff with my_parent ...
  }
  ... my_parent drops out of scope here, now others can borrow ...
etc.

Haven't tried this in compiler my memory might not be right here.


I do know that it's possible, but when people complain about this --- as with this tweet, from a PL theorist:

https://x.com/LParreaux/status/1839706950688555086

... this is what they're talking about.

(I know the tweet is about the "idiomatic" answer to this problem, which is to replace references with indices into flat data structures).


I don't have a twitter account and don't read links to paywalled services there, so don't know what the complaint is.

Ergonomics aren't great for this type of problem, but it's something I almost never run into. Feels like a cooked up example. I've written tree data structures, etc. and never had much issue. ASTs for compilers, no particular drama.

Rust is just making you consider whether you really want to do this, is all.




Consider applying for YC's Summer 2026 batch! Applications are open till May 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: