Bootstrap
#новичкам
Если вы когда-нибудь заходили в исходники своего компилятора, то могли заметить, что его исходный код написан на С++.
Также возможно вы слышали, что компилятор java написан на java.
Если вдуматься в эти факты, то невольно задаешься вопросом: а как это вообще возможно? Нельзя же себя поднять за волосы из болота.
Вообще-то барон Мюнхгаузен смог и мы сможем!
Нужно лишь немного опоры. Чуть-чуть оттолкнуться.
Давайте пройдем весь процесс от и до.
1️⃣ Вы решили написать свой язык самый лучший язык во всей вселенной GOAT. Разработали синтаксис и правила языка, пару раз пооргазмировали от его крутости.
2️⃣ Дальше вам нужно уметь конвертировать код на новом языке в программу. Выхода нет: вы быстренько пишите простой компилятор или интерпретатор GOAT на уже существующем языке. Пусть для определенности вы написали компилятор на С. Компилируете его каким-нибудь gcc и у вас появляется первый компилятор языка GOAT. Это так называемый компилятор начальной загрузки или bootstrap компилятор.
Отлично! Вы можете писать программы на новом языке!
3️⃣ Но компилятор - это же тоже программа. Теперь вы можете на GOAT написать компилятор GOAT и скомпилировать его bootstrap компилятором. В итоге у вас получится рабочий компилятор GOAT, написанный на языке GOAT! Вот яйцо и родило яйцо.
4️⃣ В дальнейшем вы можете развивать компилятор, используя сам язык GOAT и перекомпилируя его самим собой.
Весь этот процесс называется bootstrapping.
Первый компилятор и jvm были написаны на С. Первый компилятор С был написан на ассемблере. Pascal'я - на Fortran.
Интересно, что clang изначально был написан на урезанной версии С++, которая компилировалась и на gcc, и на msvc. Поэтому clang можно использовать на винде.
Преимущества бутстраппинга:
👉🏿 Демонстрирует зрелость и самодостаточность языка. Можно развиваться самостоятельно и не зависеть от других технологий.
👉🏿 Разработчики компилятора могут использовать все возможности языка, для которого они пишут компилятор.
👉🏿 Тестирование возможностей языка. Если вам недостаточно инструментов в языке, чтобы написать компилятор, значит язык нужно дорабатывать.
👉🏿 Упрощается разработка компилятора. Не нужно знать несколько языков.
А вот как бутстрапился С++ разберем в следующем посте.
Be self-sufficient. Stay cool.
#tools #compiler
Post #959
4.71K