An Intro to Compilers (2017)
While somewhat irrelevant for a majority of developers, it feels great to understand how computers actually work.<p>Even many higher education IT programs often barely cover the underpinnings anymore.<p>I'm currently embarking on a fun little "from first principles" challenge:<p>Imagine a post-apocalyptic world where computers are a relic of the past.<p>You stumble upon a functioning device with a screen and keyboard. When powered on, all you get is a bare metal "assembly interpreter". You can type in riscv64 assembly instructions and they are executed. You can print to the screen via a UART. So you don't even get an assembler/linker to build on.<p>From there you have to build up an entire new software stack, with a proper language with compiler/vm, an operating system, a standard library, basic userspace tools, a UI,  ...<p>Simulating the device and console is easy with qemu-system-riscv64 and a a bit of assembly.<p>It's very challenging, but also rewarding to study up/relearn and implement all the basic underpinnings of computers, all the way from hardware (CPU, memory, IO devices, ISAs) up to a GUI stack.<p>Hacking together a simple OS isn't actually all that hard when your hardware is constrained to a specific device. And writing a very simple language in assembly also isn't that bad. You can build progressively better languages on top of that.<p>I'd love to turn this into a somewhat guided, interactive learning experience that runs in the browser via tinyemu [1] or similar, but I won't have time for that.<p>[1] <a href="https://bellard.org/tinyemu/" rel="nofollow">https://bellard.org/tinyemu/</a>