Имеется ли какая-либо скомпилированная программа на Java, возможно ли написать версию, эквивалентную байт-коду, в Clojure? - PullRequest
4 голосов
/ 28 февраля 2011

Clojure работает на JVM и теоретически должен иметь возможность делать все, что может делать Java из-за взаимодействия Java, но действительно ли это верно на уровне байт-кода?Я претендую на эквивалентность байт-кода, чтобы подчеркнуть производительность, я предполагаю, что вам, возможно, придется пропустить написание идиоматического кода.Если это возможно, требует ли это использования библиотеки, генерирующей байт-код?

Чтобы быть более конкретным, меня интересует существование странных угловых случаев, когда Java предоставляет конструкции, которые строят байт-код совершенно другим способом.,Меня не интересует чисто выразимость на уровне языка, а скорее прогресс в способности clojure писать clojure в clojure или любой новый примитив.

Ответы [ 4 ]

3 голосов
/ 28 февраля 2011

Целью почти полной версии 1.3 является получение важной части (базовых библиотек и коллекций), чтобы иметь возможность создавать классы, эквивалентные байт-коду.это является частью продолжающейся цели clojure-in-clojure.

В конечном итоге Clojure должен создать эквивалентный, но не идентичный байт-код для всего, что имеет эквивалент в Java.Clojure может представлять вещи (например, замыкания), которые Java не делает, конечно, они не будут «эквивалентными».

3 голосов
/ 28 февраля 2011

Нет. Чтобы привести пример, я не думаю, что есть способ создать оператор if в clojure, который сгенерирует байт-код, идентичный байт-коду в Java-программе.

3 голосов
/ 28 февраля 2011

Программы Clojure всегда будут иметь дополнительный багаж во время выполнения, что может сделать их непригодными для ситуаций с крайне ограниченными ресурсами (например, Android). Но если вы не возражаете взять с собой несколько лишних мегабайт, вы всегда можете достичь производительности на уровне Java, выбрасывая соглашение в окно.

У Алекса Осборна есть отличный пример оптимизации программы Clojure, пока она не взорвала конкурента Java: http://meshy.org/2009/12/13/widefinder-2-with-clojure.html (конечно, тот же уровень внимания мог бы ускорить и версию Java).

1 голос
/ 28 февраля 2011

Нет: Java-программы, созданные в Clojure, будут иметь тенденцию быть немного больше (с точки зрения конечного размера байт-кода), что делает невозможным создание файлов, идентичных байт-коду. Это не имеет значения.Функциональность Java-взаимодействия Clojure очень хороша, и поэтому вы можете создавать функционально эквивалентный код по сравнению с любым кодом Java с асимптотически эквивалентными характеристиками производительности.(Могут существовать некоторые чрезвычайно, крайне непонятные функции Java, которые недоступны в Clojure, но я считаю, что на данный момент java-взаимодействие в clojure имеет почти 100% охват.)

...