Multithreading

Multithreading is a fairly recent topic. While the use of multiple processors has been around for almost as long as modern (transistor based) computers themselves, microcomputers only have started to provide real concurrency around the dawn of x86-64, so around the early 2000s. As a consequence, many (scripting) languages from the 90s didn't start out with parallel execution support, and because of its inherent complexity (and backwards compatibility issues), some of them don't support it to this day. They are still ways to achieve it, namely there exist Python runtimes supporting it, though they may have trouble with correctness, and modern JavaScript can use service workers.

Complexity is the keyword here, because it's incredibly hard to get parallel execution right. Most programming languages are incredibly unsafe in concurrent logic, memory safety, or both. Even Rust can't help with logic errors such as deadlocks, but it does make correct synchronisation much easier than seen on many other languages.