Вы должны выполнить кросс-компиляцию на язык, который наилучшим образом поддерживает предположения и идеи, лежащие в основе вашего языка.Если ваш язык является сборщиком мусора, все вызовы функций являются вызовами методов и не позволяют работать с адресами в качестве данных, тогда Java - это язык для компиляции.
Существуют компиляторы, которые компилируют код Java дляродные.Поэтому, если вы хотите, чтобы ваша программа работала изначально, вы можете использовать их.
Когда вы будете готовы сделать свой собственный полный компилятор для вашего языка, тогда вы можете отделить себя от Java или от того, что вы выберете.
Этот базовый подход использовался многими языками.Обычно целевым языком является C, потому что вы можете делать низкоуровневые вещи в C, которые вы не можете делать ни на каком другом языке, у него есть зрелые оптимизирующие компиляторы, и он очень быстро запускается.То, как символы C, библиотеки и соглашения о вызовах работают, также хорошо понято и имеет тенденцию строго определяться и поддерживаться несколькими языками на любой конкретной платформе.Это позволяет новому языку иметь непосредственный доступ ко всему множеству библиотек, написанных для C.
C ++, начатый таким образом (оригинальный компилятор назывался cfront), и я считаю, что OCaml также начал этот путь.Я думаю, что если вы немного покопаетесь, то сможете найти множество других языков, для которых это действительно так.
Но если вам не нужны низкоуровневые функции Cs, многие из этих аргументов применимы и к Java.Некоторые новые языки (например, Scala) используют JVM таким образом.