As a Python programmer at day job, that is Clojure-curious and sadly only gets to use it for personal projects, and is currently threatened by an obnoxious TypeScript take over, I feel this.
As a Python programmer at day job, that is Clojure-curious and sadly only gets to use it for personal projects, and is currently threatened by an obnoxious TypeScript take over, I feel this.
In the context of the original discussion, TypeScript (and ES6) has const and let.
Neither let nor even const are immutable (const prevents reassignment but not mutation if the value is of a mutable type like object or array).
Yep, I believe you'd need to call Object.seal(foo) to prevent mutability. Haven't really had the chance to use it
Object.freeze is the one you're looking for.
const + Object.freeze is a lot to remember and cumbersome to use throughout a codebase, very relevant to Carmack's wish for immutability by default. I'm grateful Rust opted for that default.
Fair enough about const and let, the obnoxiousness for me is a combination of the language ergonomics, language ecosystem, but mostly the techno-political decision making behind it.
well yeah except const doesn't make objects or arrays immutable
Yeah it makes their structure immutable? Something like that. Not useless but not what you would expect.
But for non-objects and non-arrays it's fine.
I feel that Java’s “final” would have been a better choice than “const”. It doesn’t have the same confusing connotation.
If you avoid metaprogramming and stick to the simple stuff, python and typescript are almost the same language.
To be fair, comprehensions (list/object expresions) are a nice feature that I miss a lot in JS/TS. But that's about it.
Removing barriers to sloppy code is a language feature.
That is why vibe coding, JavaScript and Python are so attractive.
Removing barriers to civil engineering building design is a feature.
Who needs to calculate load bearing supports, walls, and floors when you can just vibe oversize it by 50%.
Well if it does the job. So what?