[1]: http://joeduffyblog.com/2015/11/03/blogging-about-midori/
If the kernel was only using 1% of the CPU time before, and you rewrite it in QBASIC for a 5x slowdown, your application only sees a ~4% slowdown...
They did the same with C back in the day, versus what was being done in systems programming since the 60's.
The language C builds on, B, is a spin off of BCPL, a language designed to Bootstrap CPL.
Thanks to UNIX's success we ended up with a language whose original purpose was to bootstrap compilers, not to be a full stack programming language.
Here, systems programming in 1961, 10 years before C was born, still being sold by Unisys.
https://en.wikipedia.org/wiki/Burroughs_large_systems
Or at US military,
https://en.wikipedia.org/wiki/JOVIAL
Or during the 70's,
https://en.wikipedia.org/wiki/PL/8
https://www.computerhistory.org/revolution/input-output/14/3...
https://en.wikipedia.org/wiki/Interlisp
https://en.wikipedia.org/wiki/BLISS
https://en.wikipedia.org/wiki/Modula-2
https://en.wikipedia.org/wiki/Modula-2%2B
Remember that project Bell Labs stepped away from, which gave C's authors plenty of free time?
https://en.wikipedia.org/wiki/PL/I
https://multicians.org/myths.html
"Thirty Years Later: Lessons from the Multics Security Evaluation"
Null terminated strings.
In, "Trusting Trust" Ken tacitly admitted that C itself was the inside job. Once you align yourself with Cs core tenets, performance above all else, the game itself is up and your mind has been infected against looking at things holistically.
I beg to differ.
Lisp has been influential since the 60s, especially in certain niches (AI, symbolic algebra, etc.) and is still going strong.
Smalltalk was used throughout the 70s (although first "released" in 1980), and is far more "dynamic" than the scripting languages widely used today (e.g. Python); the classic example is 'ifTrue' being a method call which we can override (via a built-in live editor, no less!).
Prolog has been around for a while, and saw a lot of attention in the 1980s. It's much more high-level than most languages, since its interpreter runs a search algorithm to calculate results, rather than dumbly stepping through a single execution path.
Most of the cool features popping up in "modern" languages, like pattern-matching, currying, (Hindley-Milner) type inference, etc. came from ML in the 70s.
Scheme is also from the 70s, and has features like tail-call elimination which many languages/platforms are still lacking (spawing a whole sub-genre of blog posts about how to implement it in language X via trampolines). Scheme also brought attention to continuations, giving us things like coroutines. The async/await and yield features added to many languages recently are close cousins of Scheme's call/cc; as are try/catch/throw, for that matter! Although call/cc is undelimited, delimited continuations have been around since the 80s.
That's just off the top of my head, wearing my Programming Language Theory hat. If I put on my Hacker hat I could mention Sh, Snobol, Awk, Icon, ABC (Python's predecessor), etc.
My initial statement was too strong, what I meant to say was that the higher level languages were not practical for commodity application development and distribution until more recently. They’ve been along for a very long time but Smalltalk is an infamously isolated system and it was very slow even when running on an Alto (I’ve used it!). I admittedly know much less about the practical history of Scheme and Prolog.
To jolux's point, Scala, F#, Ocaml/Reason, Clojure, Haskell, Erlang while not as huge as Java and C#, they have billions in value attributable to them.
When one isn't available, the runtime plays the role of an OS, and much be adapted as such.