сначала был на окамле, потом, когда язык достаточно развился, компилятор переписали уже на раст. ну и новые версии собираются просто старыми бинарями обычно https://en.wikipedia.org/wiki/Bootstrapping_(compilers)
Как и шарп написан на шарпе, как и многие другие компиляторы написаны на языке который они компилируют. Работает примерно так: есть компилятор написанный на существующем языке (в случае раста — ocaml), компилятор переписывают на компилируемый язык (Rust), старым компилятором компилируют новый компилятор, и вот, у нас есть компилятор написанный на языке который он компилирует. Дальше мы пишем N+1-ю версию компилятора и компилируем её N-ой версий. Этот процесс называется бутстрапинг (bootstrap).
кроме старого компилятора на OCaml, есть ещё компилятор, из которого бутстрапят сейчас — mrustc. он реализует Rust 1.54 и написан на C++
например, Guix честно бутстрапит Rust из mrustc (а вот Nix бутстрапит как все, просто из бинарников предыдущей версии)
тока он без борровчекера врод
да, но это неважно, т. к. он нужен для компиляции самого rustc, а rustc уже проборроучекан
(Guix вообще примечателен тем, что он бутстрапится почти с нуля, а в экспериментальных версиях бутстрапится из бинарника размером в 357 байт
там долгий путь сначала простой ассемблер, потом ассемблер посложнее, потом Mes (которые пара из Scheme и C, бутстрапящих друг друга; не помню, кто собирается первым), т. к. они бутстрапят друг друга, в этот момент проверяется воспроизводимость, и дальше через компилятор си уже понятно
собирается tcc, потом glibc, binutils и древний GCC, дальше бутстрапим GCC до новых версий, и из GCC уже всё остальное
Я правильно понимаю, что если хочется полностью скомпилировать самостояльно с нуля (например, взяв философию Gentoo), то нужно каждую версию последовательно компилировать?
Ну да, надо скомпилить каждую версию, начиная с бутстрап компилятора который вам нравится.
Обсуждают сегодня