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

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.




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

Search: