This article needs additional citations for verification. (April 2010)
In computer programming, self-hosting is the use of a program as part of the toolchain or operating system that produces new versions of that same program—for example, a compiler that can compile its own source code. Self-hosting software is commonplace on personal computers and larger systems. Other programs that are typically self-hosting include kernels, assemblers, command-line interpreters and revision control software.
If a system is so new that no software has been written for it, then software is developed on another self-hosting system, often using a cross compiler, and placed on a storage device that the new system can read. Development continues this way until the new system can reliably host its own development. Writing new software development tools without using another host system is rare.
The first self-hosting compiler (excluding assemblers) was written for Lisp by Hart and Levin at MIT in 1962. They wrote a Lisp compiler in Lisp, testing it inside an existing Lisp interpreter. Once they had improved the compiler to the point where it could compile its own source code, it was self-hosting.
The compiler as it exists on the standard compiler tape is a machine language program that was obtained by having the S-expression definition of the compiler work on itself through the interpreter.— AI Memo 39
This technique is usually only practicable when an interpreter already exists for the very same language that is to be compiled; though possible, it is extremely uncommon to humanly compile a compiler with itself. The concept borrows directly from and is an example of the broader notion of running a program on itself as input, used also in various proofs in theoretical computer science, such as the proof that the halting problem is undecidable.
Ken Thompson started development on Unix in 1968 by writing and compiling programs on the GE-635 and carrying them over to the PDP-7 for testing. After the initial Unix kernel, a command interpreter, an editor, an assembler, and a few utilities were completed, the Unix operating system was self-hosting - programs could be written and tested on the PDP-7 itself.
Douglas McIlroy wrote TMG (a compiler-compiler) in TMG on a piece of paper and "decided to give his piece of paper to his piece of paper," doing the computation himself, thus compiling a TMG compiler into assembly, which he typed up and assembled on Ken Thompson's PDP-7.
Development of the GNU system relies largely on GCC (the GNU C Compiler) and GNU Emacs (a popular editor), making possible the self contained, maintained and sustained development of free software for the GNU Project.
Many programming languages have self-hosted implementations: compilers that are both in and for the same language. In some of these cases, the initial implementation was developed using bootstrapping, i.e. using another high-level language, assembler, or even machine language.
List of languages having self-hosting compilers
The following programming languages have self-hosting compilers:
- ALGOL (Burroughs B5000)
- C++ (Visual C++, clang, gcc 4.8)
- C# (Microsoft Roslyn, Mono)
- Lisp (Common Lisp)
- Pascal (Free Pascal)
- Python (PyPy)
- Raku (Rakudo)
- Standard ML (MLton)
- Visual Basic .NET (Microsoft Roslyn, Mono)
- Bootstrapping (compilers)
- Cross compiler
- Futamura projection
- Self reference
- Self-modifying code
- Tim Hart and Mike Levin. "AI Memo 39-The new compiler" (PDF). Retrieved 2008-05-23.[permanent dead link]
- Ken Thompson. "VCF East 2019 -- Brian Kernighan interviews Ken Thompson". Retrieved 2019-10-28.
- Dennis M. Ritchie. "The Development of the C Language". 1993.
- BASICO compiler bootstrapping example
- ClojureScript Next
- https://www.pyret.org Archived 2018-04-10 at the Wayback Machine
- "Archived copy". Archived from the original on 2017-06-04. Retrieved 2017-09-19.CS1 maint: archived copy as title (link)
- "Archived copy". Archived from the original on 2014-12-28. Retrieved 2015-05-27.CS1 maint: archived copy as title (link)