As often comes up here and on HN, it seems like self-hosting is often a step that young languages take to stress-test the language, but compiling a programming language is a different tasks than general purpose programming tasks.
I’m curious if anyone knows of any relatively popular languages that did not go through the self-hosting-compiler stepping stone, and, if any, what project did those languages use to sort of “prove themselves”?
Swift hasn’t gone self-hosting at least yet, the compiler is still in C++.
Rust is not self-hosting too since they rely on LLVM and rustc is not sufficient to build rustc from source.
Thinking for like 30 seconds more, I have a list:
It looks like most of the other relatively-mainstream (non-interpreted) languages took the self-hosting route so maybe there aren’t any success stories/project examples for languages that took a different approach
Sticking with just compiled languages, these don’t have self-hosting compilers (brackets show compiler implementation language): Java (C++), D, Objective-C, Julia (all C/C++ and LLVM), Elm (haskell), etc. Fortran probably had a self-hosted compiler at one point, but nowadays all the implementations are in C.
I didn’t include java b.c. this wikipedia page lists it as a language with self-hosting compiler: https://en.wikipedia.org/wiki/Self-hosting_(compilers) but I don’t see any evidence of that anywhere else.
Objective-C and Fortran/Julia are both interesting as far as the how did they prove themselves question goes. Both sort of had a target market in mind, so they just started building things to meet the needs of that market. I suppose elm falls into that category as well.
I guess something like a web server or database might be a good proof-of-viability for a language like zig as well, however, it looks like my premise for “why selfhost” is wrong in zig’s case, see: https://github.com/ziglang/zig/issues/89#issuecomment-328214707
IMO the most compelling pro for self-hosting is that everyone who uses the language can read/debug/extend the compiler. Its much easier to onboard new contributors if you don’t require expertise in an additional language.
The comments wondering about whether Zig made the right call requiring libraries to handle allocation failure individually makes for a great read. As noted by khim, the linked Why Zig when there’s already X language is also a great introduction.