There’s actually good reasons for this design. It’s easy to write a Scheme interpreter, but it’s hard to write a C compiler that handles everything correctly. Much rather write it in higher level language if possible and Scheme lowers the bar to getting there.
Then you can write your C compiler in C and close the loop. For your final step, you use the C compiler to compile itself.
I saw a Scheme interpreter written in assembly running a C compiler written in Scheme.
There’s actually good reasons for this design. It’s easy to write a Scheme interpreter, but it’s hard to write a C compiler that handles everything correctly. Much rather write it in higher level language if possible and Scheme lowers the bar to getting there.
Then you can write your C compiler in C and close the loop. For your final step, you use the C compiler to compile itself.