- C#, Swift, Julia, Nim, Crystal, and very recently OCaml have separate value types and reference types. The choice is not orthogonal, which is what you don't like. (Java, Python, etc. do not have value types at all)
- Only Go and D have the memory model of C (values and references), with GC.
- Rust has also has the model of C, but with "static memory management"
This is hard to implement in a memory-safe language. For example, the new WASM GC virtual machine does not support interior pointers.
I noticed this distinction recently, regarding the rewrite of TypeScript in Go:
https://lobste.rs/s/3q0ei5/10x_faster_typescript#c_xndrsg
- C#, Swift, Julia, Nim, Crystal, and very recently OCaml have separate value types and reference types. The choice is not orthogonal, which is what you don't like. (Java, Python, etc. do not have value types at all)
- Only Go and D have the memory model of C (values and references), with GC.
- Rust has also has the model of C, but with "static memory management"