I wrote a simple self-hosting compiler to showcase Niklaus Wirth's approach to writing compilers: https://github.com/lboasso/oberonc
Single pass compilers have their advantages.
"The School of Niklaus Wirth" [0] contains this essay and many others on how simplicity can be an essential quality of a system. I vastly under appreciated how well Wirthian languages are designed, even after toying with the excellent offshoot, Modula3 [1]. In my youth I was too concerned with raw performance and syntax. In my old age I am concerned about semantics and maintainability.
[0] https://www.amazon.com/School-Niklaus-Wirth-Art-Simplicity/d...