C++
Assume you have a class Foo, and this:
const Foo fooInst(1, 2, 3);
if you try to call a method foo.bar() you can't, unless that method bar() is also marked const with this type of signature:
int bar() const;
Meaning that bar returns an int, but can't assign to any fields or call any other non-const methods.
Although, it does have this hideous const_cast<> operator that anyone can use to break these rules.
Does any other language than Rust implement it this way? I know Rust needs to, for the borrowing semantics.
Java does it the same way as JS. Scala and Haskell both make everything immutable by default as convention, but there's nothing preventing you from mutating a `var` field of a `val` reference, or abusing `unsafePerformIO` to modify an `IORef` from a supposedly pure context.