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

Другими словами, если язык программирования, который вы использовали для создания компилятора Python, — Python, этот процесс называется начальной загрузкой. И компилятор, который применяет этот процесс начальной загрузки, называется самостоятельным компилятором.

Хм? Создание компилятора для компиляции Python с использованием Python? Как это возможно?

Одна из первых вещей, которую нужно иметь в виду, это то, что компиляторы в конце концов являются программами. Это означает, что компиляторы также должны компилировать.

Если это так, то когда вы впервые создаете компилятор, вам будет сложно превратить его в язык программирования, который вы хотите скомпилировать.

Ответ заключается в том, что когда вы впервые создаете компилятор, вы используете язык, отличный от языка, который вы хотите скомпилировать.

Итак, мы собираемся использовать язык C для создания компиляторов Python, и сначала мы собираемся сделать компиляторы Python. Это создаст компилятор Python, написанный на языке C.

Я временно буду называть это v1 (компилятор Python, созданный на языке C). Исходный код, написанный на Python, теперь можно скомпилировать с помощью v1.

Затем используйте Python для создания нового компилятора (v2), а затем используйте v1 для компиляции v2. Теперь у нас есть компилятор Python, написанный на Python (саморазмещающийся компилятор)!

Есть много языков, которые имеют собственные компиляторы, такие как Java, Go, Rust, Python и C. Здесь может возникнуть один вопрос. Зачем создавать компиляторы на языке, который вы хотите скомпилировать?

Есть много преимуществ, но позвольте мне представить некоторые из них.

  1. Это похоже на проведение важного теста на языке для компиляции. Потому что если есть проблема с языком, он сам себя не компилирует.
  2. Разработчикам, разрабатывающим компиляторы, нужно знать только один язык.
  3. Среда, в которой вы разрабатываете компилятор, может состоять из расширенных языков для компиляции.

Он также имеет много преимуществ, указывающих на то, что многие языки имеют самостоятельные компиляторы.

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