LINUX.ORG.RU

История изменений

Исправление vbr, (текущая версия) :

Я не знаю, как это делается в случае gcc, но когда я думал на эту тему про свой компилятор, то решение выглядит довольно очевидно:

  1. Проектируется абсолютно минимальный язык.

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

  3. Этот компилятор компилируется «в уме» и руками забивается бинарный файл со скомпилированным кодом компилятора.

  4. Этот бинарный файл запускается на код компилятора и его выхлоп проверяется сам с собой. Он должен отработать и вывод должен совпасть сам с собой.

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

Если предположить, что мы живём не в каменном веке, то вместо компиляции «вручную» можно написать интерпретатор на питоне и использовать его для создания первого бинарника на третьем шаге.

Исправление vbr, :

Я не знаю, как это делается в случае gcc, но когда я думал на эту тему про свой компилятор, то решение выглядит довольно очевидно:

  1. Проектируется абсолютно минимальный язык.

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

  3. Этот компилятор компилируется «в уме» и руками забивается бинарный файл со скомпилированным кодом компилятора.

  4. Этот бинарный файл запускается на код компилятора и его выхлоп проверяется сам с собой. Он должен отработать и вывод должен совпасть сам с собой.

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

Если предположить, что мы живём не в каменном веке, то вместо компиляции «вручную» можно написать интерпретатор на питоне и использовать его для создания первого бинарника на третьем шаге.

Также надо помнить, что компиляторы могут переживать архитектуры. К примеру первый gcc работал для Motorola 68020. Сейчас такой компьютер найти - задача не совсем тривиальная. Наверняка можно найти какой-нибудь эмулятор. Но можно изначально пойти немного другим путём и «бутстрап» компилятор написать для какого-нибудь виртуального кода, к примеру MIX. Ну а для него уже написать интерпретатор на чём угодно. Насколько это честный путь - решайте сами.

Исправление vbr, :

Я не знаю, как это делается в случае gcc, но когда я думал на эту тему про свой компилятор, то решение выглядит довольно очевидно:

  1. Проектируется абсолютно минимальный язык.

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

  3. Этот компилятор компилируется «в уме» и руками забивается бинарный файл со скомпилированным кодом компилятора.

  4. Этот бинарный файл запускается на код компилятора и его выхлоп проверяется сам с собой. Он должен отработать и вывод должен совпасть сам с собой.

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

Если предположить, что мы живём не в каменном веке, то вместо компиляции «вручную» можно написать интерпретатор на питоне и использовать его для создания первого бинарника.

Исправление vbr, :

Я не знаю, как это делается в случае gcc, но когда я думал на эту тему про свой компилятор, то решение выглядит довольно очевидно:

  1. Проектируется абсолютно минимальный язык.

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

  3. Этот компилятор компилируется «в уме» и руками забивается бинарный файл со скомпилированным кодом компилятора.

  4. Этот бинарный файл запускается на код компилятора и его выхлоп проверяется сам с собой. Он должен отработать и вывод должен совпасть сам с собой.

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

Если предположить, что мы живём не в каменном веке, то вместо компиляции «вручную» можно написать интерпретатор на питоне и использовать его.

Исправление vbr, :

Я не знаю, как это делается в случае gcc, но когда я думал на эту тему про свой компилятор, то решение выглядит довольно очевидно:

  1. Проектируется абсолютно минимальный язык.

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

  3. Этот компилятор компилируется «в уме» и руками забивается бинарный файл со скомпилированным кодом компилятора.

  4. Этот бинарный файл запускается на код компилятора и его выхлоп проверяется сам с собой. Он должен отработать и вывод должен совпасть сам с собой.

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

Исходная версия vbr, :

Я не знаю, как это делается в случае gcc, но когда я думал на эту тему про свой компилятор, то решение выглядит довольно очевидно:

  1. Проектируется абсолютно минимальный язык.

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

  3. Этот компилятор компилируется «в уме» и руками забивается бинарный файл с кодом компилятора.

  4. Этот бинарный файл запускается на код компилятора и его выхлоп проверяется сам с собой. Он должен отработать и вывод должен совпасть сам с собой.

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