upvote
Memory garbage collection, borrow checker, compile-time static typing in dynamic languages (Typescript, Python).

Language specific for JavaScript: Strict comparison operator === that disables type coercion, together with banning ==.

== allows "5" equals 5.

reply
To get perspective(we know what worked), here’s some 50+ years abstractions:

A file is a simple stream of bytes in Unix. (If you think what else it might be then compare to Multics’ segments). Separate processes that may be connected using simple standard I/O streams [pipe] (vs everything is DLL in Multics) — the concept of shell itself (policy vs. mechanism separation http://www.catb.org/esr/writings/taoup/html/ch01s06.html ).

https://retrocomputing.stackexchange.com/questions/15685/wha...

For comparison, you need a new app on iOS for what might have been a shell pipeline (hierarchical file system is absent at user level).

reply
Take message queues. ZMQ and the like have basically solved message passing which was a ghastly thing to worry about for many years.
reply
Build tools that enforce hermeticity (cannot depend on files not declared as a dependency) and hashes files (as opposed to using timestamps). This eliminates whole classes of complaints against make.
reply
The actor model for concurrency.
reply
Read The Linux Programming Interface book
reply