Plan 9 C is wonderful to work in. I really enjoy its simplicity and how the system design has trimmed away a lot of the ugly API's (select and poll, thank god they're gone...) and replaced them by modern multi-process solutions like thread(2) and ioproc(2). Plan 9 was designed ground up for multi-processor machines and it's all channels (if Go were an OS...)
> Decades and centuries of compute-time saved.
Rebuild all of 9front user space from source: 'cd /sys/src; mk clean; time mk install' - 51.48u 36.14s 51.23r mk install. almost 51.5 seconds, under a minute on a measly quad core i5-6500T CPU @ 2.50GHz - a Dell micro desktop with a SATA SSD.
9front amd64 PC kernel build: 'cd /sys/src/9/pc64; mk clean; time mk' - 5.38u 1.16s 4.19r mk. FIVE FUCKING SECONDS. Same machine as above. Time to build the Arm64 Pi kernel: 4.66u 0.83s 3.99r mk. About one second faster. Edit, I should add the kernel sizes: 9pc64 - 5,412,046 bytes, 9pi3 - 4,443,400 bytes. About a second per megabyte of executable machine code generated.
I think, though, that one of the vastly underestimated aspects of Plan 9/9front is its simplified C.
AIUI one of the biggest differences is that a file is not allowed to `#include` anything that has already been #included in a parent project. You are not allowed to nest #includes.
The result is vastly reduced compile times. I have read claims of over 1000x fewer lines of code going through the compiler.
(Sure, disk caching helps a lot, but it still has to go through CPU.)
Cleaning up a codebase is a massive PITA but it's a one-time job and I have read comments that once you learn this, it quickly becomes habit.
Imagine if that was put into C29 as an advisory.
Decades and centuries of compute-time saved.
This is standard in Go, which is of course Pike's more recent baby.
ANSI C let you get away with this, which sounds like one of the more epic mistakes:
https://go.dev/talks/2012/splash.article#TOC_5.