I've skimmed Crafting Interpreters and the Bytecode VM section seems to spend an inexplicable amount of time on not only parsing, but minutia having nothing to do with compilers (e.g. writing a custom dynamic array implementation in C).
This is what happened with Bitwise University.
In 2018, I pleaded with Per when he announced the project to just take Wirth's Oberon, re-implementing it but change the lexer so it's a curly brace language, maybe changing the grammar in some other places so it's more comfortable for a C programmer, and only then consider adding a new backend (or, in hindsight, work on them in parallel—the point being to just fall back on the existing, already available, known-to-work implementation once it becomes apparent that doing a backend from scratch is hard). I.e., avoid the yak-shaving and get to the compiler-writing as soon as possible.
He decided not to, and the first substantial episode—"Day 2", the third stream—spent an hour faffing with a C implementation of "stretchy buffers" https://bitwise.handmade.network/episode/bitwise/bitwise002/



