In reply to @crochubourbier "or the fact that": Semantically everything behaves like a value. For dynamic heap types like `seq` and `string` they're hidden stack-managed fat-pointers. So every type in the language, top to bottom, unless specifically marked `ref` or `ptr`, has a scoped lifetime, the vast majority of functions operate on value and produce new values rather than operating on identity or modifying in place (so they can function with immutability by default), and it's all enforced by compiler unless you explicitly activate the escape hatches which then very clearly marks every place in code where reference semantics are being used.