Как / Могу ли я скомпилировать Clojure с GCJ?
Поскольку Clojure построен поверх JVM, я думаю, я мог бы использовать GCJ для компиляции его непосредственно в машинный код, но я не могу найти никакой информации об этом.
Когда это возможно, как я могу затем "раздеть" его до самого необходимого, чтобы время запуска и объем памяти были как можно меньше.
Мне бы очень хотелось писать небольшие терминальные программы, следуя принципам UNIX, с Clojure
2 ответа
Теоретически, вы можете AOT-компилировать исходный код Clojure в байт-код Java, а затем использовать gcj
скомпилировать этот байт-код в машинный код. На практике я не ожидал бы, что это сработает; gcj
имеет серьезные ограничения, которые не позволяют использовать его в большинстве современных приложений Java. В частности, его поддержка языковых функций останавливается на Java 1.2 (для Clojure требуется Java 1.6), и он имеет неполные реализации стандартных библиотек классов, требуемых средой выполнения Clojure. В дикой природе я видел сбой и сгорание приложений Clojure при случайном запуске с помощью gcj
время выполнения вместо OpenJDK или Oracle JRE.
Компилятор clojure принимает исходные "выражения", обычно из файла, и создает байт-код JVM. Этот байт-код затем компилируется JIT-стилем в машинный код с помощью JVM. компилятор clojure и GCJ оба являются компиляторами, хотя и для разных языков, поэтому нет смысла говорить о цепочке один за другим. Компилятор clojure не создает исходный код Java, он напрямую создает байт-код.