TGViewer
Just code IT Just code IT @justcodeit_channel · 1.32K subscribers
Post #163 1.53K
Низкоуровневый бутстрап языков программирования

Конечно, вы слышали про понятие бутстрапа в разрезе разработки языков программирования. Кто-то создает новый язык, а компилятор для него разрабатывает на уже существующем языке программирования. После чего становится возможным переписать компилятор на новом языке, и собрать его первым компилятором. Теперь мы можем разрабатывать компилятор для нового языка на нем же самом. Простая и богатая идея.

Но как быть с доверием к компилятору? Кен Томпсон в статье "Reflections on Trusting Trust" упоминал, что компилятор, которому мы доверяем, может быть "зараженным" и продуцировать зараженный код. Есть ли способ получить доверенный компилятор сразу?

Ну, например, можно постараться создать цепочку доверенных компиляторов, которые собирают друг друга. Причем первый из них сделать настолько простым, чтобы его можно было закодировать в машинных кодах.

Примерно так устроен проект Картика Агарама (Kartik Agaram) Mu. В рамках этого проекта автор разработал несколько языков программирования, каждый из которых может исполняться на платформе x86 и собирать компилятор языка более высокого уровня, пока не получится компилятор ЯВУ наподобие C.

Картик начинает с примитивного языка, лишь немного расширяющего весьма ограниченный набор машинных кодов процессора.

Не менее интересны и проекты, пытающиеся создать минимальный интерпретатор языка Forth.

StoneKnifeForth представляет собой примитивный Forth, все слова которого записываются одним ASCII символом. Компилятор для такого языка написать несложно даже без ассемблера под рукой. Для упрощения бутстрапа автор использует примитивный интерпретатор, разработанный на языке Python. Первая рабочая копия компилятора, полученная благодаря бутстрапу, уже является исполняемым файлом ELF и позволяет расширять набор конструкций языка привычными словами Forth.

Не менее интересен проект PlanckForth, реализацию которого скрупулезно написали в машинных кодах (уж точно никто кроме авторов не оставит закладки). Файл с HEX-дампом достаточно пропустить через утилиту xxd и на выходе получится исполняемый файл компилятора минималистичного Forth. Этот примитивный язык может быть расширен уже своими внутренними средствами до приемлемого уровня, позволяющего написать что-то более сложное.

#digest
GitHub GitHub - akkartik/mu: Soul of a tiny new machine. More thorough tests → More comprehensible and rewrite-friendly software → More… Soul of a tiny new machine. More thorough tests → More comprehensible and rewrite-friendly software → More resilient society. - akkartik/mu
  • 👍 9
  • 👎 1
More from @justcodeit_channel
  1. Aug 1, 20243D ландшафт в 256 байт Существуют разные виды intro — небольших динамических сцен, генерир…
  2. Jul 17, 2024Практическое погружение в метакомпиляторы Практически у каждого из наших читателей с образ…
  3. Jul 3, 2024Как создаются 64 intro Уверены, многие наши читатели слышали про демосцену — вид цифрового…
  4. Jun 14, 2024Создание программы 3D моделирования за неделю Недавно обнаружили на просторах сети занимат…
  5. May 28, 2024VPN, созданный по принципам Secure-by-design Много кто пишет про подход SbD (Secure-by-des…
  6. Apr 24, 2024Наследие Никлауса Вирта Как известно, 1 января 2024 года не стало Никлауса Вирта (Niklaus…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →