История изменений
Исправление vbr, (текущая версия) :
Я не знаю, как это делается в случае gcc, но когда я думал на эту тему про свой компилятор, то решение выглядит довольно очевидно:
-
Проектируется абсолютно минимальный язык.
-
Пишется абсолютно минимальный компилятор на этом же языке. Без всяких оптимизаций и прочего, максимально примитивный.
-
Этот компилятор компилируется «в уме» и руками забивается бинарный файл со скомпилированным кодом компилятора.
-
Этот бинарный файл запускается на код компилятора и его выхлоп проверяется сам с собой. Он должен отработать и вывод должен совпасть сам с собой.
После этого имеется компилятор, который компилирует сам себя. Его нужно зафиксировать как бинарный артефакт и при дальнейшем развитии компилятора и языка каждая следующая версия должна быть реализована в рамках предыдущей.
Если предположить, что мы живём не в каменном веке, то вместо компиляции «вручную» можно написать интерпретатор на питоне и использовать его для создания первого бинарника на третьем шаге.
Исправление vbr, :
Я не знаю, как это делается в случае gcc, но когда я думал на эту тему про свой компилятор, то решение выглядит довольно очевидно:
-
Проектируется абсолютно минимальный язык.
-
Пишется абсолютно минимальный компилятор на этом же языке. Без всяких оптимизаций и прочего, максимально примитивный.
-
Этот компилятор компилируется «в уме» и руками забивается бинарный файл со скомпилированным кодом компилятора.
-
Этот бинарный файл запускается на код компилятора и его выхлоп проверяется сам с собой. Он должен отработать и вывод должен совпасть сам с собой.
После этого имеется компилятор, который компилирует сам себя. Его нужно зафиксировать как бинарный артефакт и при дальнейшем развитии компилятора и языка каждая следующая версия должна быть реализована в рамках предыдущей.
Если предположить, что мы живём не в каменном веке, то вместо компиляции «вручную» можно написать интерпретатор на питоне и использовать его для создания первого бинарника на третьем шаге.
Также надо помнить, что компиляторы могут переживать архитектуры. К примеру первый gcc работал для Motorola 68020. Сейчас такой компьютер найти - задача не совсем тривиальная. Наверняка можно найти какой-нибудь эмулятор. Но можно изначально пойти немного другим путём и «бутстрап» компилятор написать для какого-нибудь виртуального кода, к примеру MIX. Ну а для него уже написать интерпретатор на чём угодно. Насколько это честный путь - решайте сами.
Исправление vbr, :
Я не знаю, как это делается в случае gcc, но когда я думал на эту тему про свой компилятор, то решение выглядит довольно очевидно:
-
Проектируется абсолютно минимальный язык.
-
Пишется абсолютно минимальный компилятор на этом же языке. Без всяких оптимизаций и прочего, максимально примитивный.
-
Этот компилятор компилируется «в уме» и руками забивается бинарный файл со скомпилированным кодом компилятора.
-
Этот бинарный файл запускается на код компилятора и его выхлоп проверяется сам с собой. Он должен отработать и вывод должен совпасть сам с собой.
После этого имеется компилятор, который компилирует сам себя. Его нужно зафиксировать как бинарный артефакт и при дальнейшем развитии компилятора и языка каждая следующая версия должна быть реализована в рамках предыдущей.
Если предположить, что мы живём не в каменном веке, то вместо компиляции «вручную» можно написать интерпретатор на питоне и использовать его для создания первого бинарника.
Исправление vbr, :
Я не знаю, как это делается в случае gcc, но когда я думал на эту тему про свой компилятор, то решение выглядит довольно очевидно:
-
Проектируется абсолютно минимальный язык.
-
Пишется абсолютно минимальный компилятор на этом же языке. Без всяких оптимизаций и прочего, максимально примитивный.
-
Этот компилятор компилируется «в уме» и руками забивается бинарный файл со скомпилированным кодом компилятора.
-
Этот бинарный файл запускается на код компилятора и его выхлоп проверяется сам с собой. Он должен отработать и вывод должен совпасть сам с собой.
После этого имеется компилятор, который компилирует сам себя. Его нужно зафиксировать как бинарный артефакт и при дальнейшем развитии компилятора и языка каждая следующая версия должна быть реализована в рамках предыдущей.
Если предположить, что мы живём не в каменном веке, то вместо компиляции «вручную» можно написать интерпретатор на питоне и использовать его.
Исправление vbr, :
Я не знаю, как это делается в случае gcc, но когда я думал на эту тему про свой компилятор, то решение выглядит довольно очевидно:
-
Проектируется абсолютно минимальный язык.
-
Пишется абсолютно минимальный компилятор на этом же языке. Без всяких оптимизаций и прочего, максимально примитивный.
-
Этот компилятор компилируется «в уме» и руками забивается бинарный файл со скомпилированным кодом компилятора.
-
Этот бинарный файл запускается на код компилятора и его выхлоп проверяется сам с собой. Он должен отработать и вывод должен совпасть сам с собой.
После этого имеется компилятор, который компилирует сам себя. Его нужно зафиксировать как бинарный артефакт и при дальнейшем развитии компилятора и языка каждая следующая версия должна быть реализована в рамках предыдущей.
Исходная версия vbr, :
Я не знаю, как это делается в случае gcc, но когда я думал на эту тему про свой компилятор, то решение выглядит довольно очевидно:
-
Проектируется абсолютно минимальный язык.
-
Пишется абсолютно минимальный компилятор на этом же языке. Без всяких оптимизаций и прочего, максимально примитивный.
-
Этот компилятор компилируется «в уме» и руками забивается бинарный файл с кодом компилятора.
-
Этот бинарный файл запускается на код компилятора и его выхлоп проверяется сам с собой. Он должен отработать и вывод должен совпасть сам с собой.
После этого имеется компилятор, который компилирует сам себя. Его нужно зафиксировать как бинарный артефакт и при дальнейшем развитии компилятора и языка каждая следующая версия должна быть реализована в рамках предыдущей.