Great questions! I've actually never considered putting the comment first! I'll have to think about that one.
You're right to point out that there are two components to "C compilers written in C make compilers seem complex": the metacircularity, and C-specific difficulties. I think I was focusing on the first when I wrote that, but I can't exclude the possibility you raise. A better language might reduce the need to understand it operationally, by looking under the hood to understand what a line of code is translated to. The Mu way may well be a dead end, since the requirement of understanding translated code restricts how complex compiler optimizations can get. You probably don't want to understand Haskell's loop fusion by comparing source and generated code.
In my mind there's an idea maze where there are 3 major possibilities for improving the future of software:
a) Simple languages and translators that are easy to understand by running them. This is the Mu way.
b) Type-driven languages that are easy to understand by reading them. Haskell and OCaml seem to fit here, and they may well be the right answers.
c) Complex languages that discourage abstractions atop them. This is the APL way, and it too might end up being the right way.
I'm doing a) mostly because it seems to fit my brain better. I just can't seem to get into Haskell or OCaml or APL.
You're right to point out that there are two components to "C compilers written in C make compilers seem complex": the metacircularity, and C-specific difficulties. I think I was focusing on the first when I wrote that, but I can't exclude the possibility you raise. A better language might reduce the need to understand it operationally, by looking under the hood to understand what a line of code is translated to. The Mu way may well be a dead end, since the requirement of understanding translated code restricts how complex compiler optimizations can get. You probably don't want to understand Haskell's loop fusion by comparing source and generated code.
In my mind there's an idea maze where there are 3 major possibilities for improving the future of software:
a) Simple languages and translators that are easy to understand by running them. This is the Mu way.
b) Type-driven languages that are easy to understand by reading them. Haskell and OCaml seem to fit here, and they may well be the right answers.
c) Complex languages that discourage abstractions atop them. This is the APL way, and it too might end up being the right way.
I'm doing a) mostly because it seems to fit my brain better. I just can't seem to get into Haskell or OCaml or APL.