Thanks, that is interesting about using a refcell. It hadn't occurred to me that a refcell was considered immutable for purposes of Rc. What about the issue of refcounting cylic structures though? I thought the route around that was weakrefs per someone else's suggestion.
By pointers, do you mean unsafe pointers that aren't borrow checked? I guess that's not really worse than writing a little bit of the program in C so it may be the right approach pragmatically. So I'm again wondering about Servo. I guess eventually Rust will get verification tools that let you check the soundness of "unsafe" code too. So the discomfort might only be temporary.
Sure, hashmap or numeric indices are abstractly equivalent to pointers, but Rust is supposed to be a low level language that can deal with machine primitives, and pointers are machine primitives. Simulating them through extra levels of tables is unsatisfying. Also, the uses of those pseudo-pointers are no longer checked by the compler, so your program is vulnerable to many (not all) of the same old-fashioned pointer errors that Rust was supposed to rescue us from.