Несколько экземпляров Clojure от Java? - PullRequest
0 голосов
/ 26 апреля 2020

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

Тем не менее, когда я вижу реализацию, я вижу, что среда Clojure (пространства имен и т. Д.) Глобальны, поэтому любое изменение пространств имен одно. Скрипт может создавать, влияет на следующие скрипты.

Интересно, есть ли способ иметь несколько временных, изолированных экземпляров среды Clojure в одной JVM. Если нет, какую стратегию можно использовать, чтобы избежать загрязнения глобальных пространств имен и потенциальной утечки памяти.

1 Ответ

0 голосов
/ 26 апреля 2020

Если вы хотите запускать сценарии изолированно, было бы целесообразно использовать отдельный загрузчик классов для каждого - независимо от того, является ли это clojure или любым другим видом изолированного кода.

Это позволит иметь несколько реализаций одного и того же пространства имен (т. е. пакетов).

Я не уверен, что загрузчик классов Clojure будет хорошо с этим работать, поэтому необходимы некоторые эксперименты.

Вам также необходимо запускать с включенным SecurityManager и определять политики, которые будут препятствовать доступу изолированного кода к таким вещам, как файловая система, запущенные процессы, открытие сокетов сервера и т. д. c.

...