Предположим, что я пишу язык программирования; для тезки, я назову его lang.Письменные языки для JVM
Чтобы начать длинный путь письма lang, я решаю начать, написав lang сам по себе. Я не могу на самом деле запустить, потому что theres ничего не запускать программу, которая работает сама.
Итак, я начинаю с написания другого компилятора для lang в Java. На этот раз, когда я закончил, я решил преобразовать его в Bytecode и оставить его на этом. У меня теперь есть рабочий компилятор, который преобразует весь мой код lang в Bytecode.
Так что я решил подключить мой самокомпилируемый компилятор для языка, в компилятор, который я только что сделал на Java. Затем я преобразую self-компилятор в Bytecode и вытаскиваю компилятор Java. У меня теперь есть lang компилятор, написанный сам по себе, преобразованный в Bytecode, готовый к использованию.
Это создает простую программу, и я понимаю все это, но мой вопрос относительно конструкции компилятора для JVM, Что делать, если я решит выпустить обновление для моего языка? Как мне обновить Bytecode? Я просто переписываю обновленную версию языка в более старой версии?
Я спрашиваю об этом, потому что это то, что я хочу сделать. Пишите несуществующий язык сам по себе, а затем загружайте его в JVM, сначала создавая компилятор на Java.
Это то же самое, что и с C++. C с классами был написан, а затем C++ в нем, и, наконец, C с классами был оставлен для загруженного C++. Но тогда, как они вообще обновляли язык?
Отладка байтового кода может быть довольно болезненной. Я предлагаю вам написать переводчика 'lang' в' java'. Таким образом, вы увидите, что он делает и отлаживает переведенную Java. Позже вы можете написать более эффективный компилятор прямо в байтовый код. –
@Peter Lawrey: «Отладка байтового кода» редко требуется. Если у вашего сгенерированного файла класса есть атрибуты отладки, определяющие имя исходного файла и сопоставление инструкций с номерами строк, вы можете отлаживать его так же гладко, как исходный код Java, независимо от того, на каком языке он был написан. – Holger
Если вы обновите свой язык, вы должны реализовать новые функции, используя только функции предыдущего языка. Только после этого вы можете начать использовать новые функции в компиляторе. – Holger