I'm not really familiar with Go, Nim, or Crystal, but I spent some time learning about Rust yesterday. I thought it was pretty interesting. In particular, 1) The GC is optional (memory safety is enforced by the type system and #2). 2) Smart pointers with separate operators and support for reference counting. 3) Immutability by default. Someone (somewhere) made an interesting point that it can be conceptually convenient to have the most restrictive choice as the default. I'm not sure I agree with that (maybe the most common choice used in good code), but at least immutability by default it can be helpful for concurrent programming.

All of the above seems to have a downside too
1) The memory safety stuff is pretty confusing. Move and copy both use the equality operator, but you're not always able to use it depending on the type. I think a separate move operator would clear up some of the confusion. I also didn't really get a good handle on how borrowing and lifetimes worked, but it seemed in need of a simpler explanation. 2) The plethora of options for smart pointers and reference counting 2) No prefix operators like ++a. Perhaps a consequence of immutability.

Reply via email to