Джулия: Генерируйте код во время выполнения и сохраняйте его для будущей оценки/выполнения

#serialization #reflection #julia #metaprogramming #code-generation

Вопрос:

В Джулии, как можно сгенерировать произвольный код, чтобы сериализовать его в файл для будущего выполнения в совершенно другом экземпляре программы? Возможно ли это вообще? Есть ли необходимость хранить какой-либо текущий контекст для будущего выполнения?

Ответ №1:

Я думаю, что вы ищете PackageCompiler.jl (https://github.com/JuliaLang/PackageCompiler.jl)

Ответ №2:

Вот более подробный ответ

  1. Поместите свой код в пакет Julia. Это то, что вы должны делать с любым производственным кодом — это намного удобнее. Пусть говорят, что это так MyPackage
  2. Создайте сценарий, который запускает все методы в пакете с типами, которые вы планируете использовать, чтобы компилятор знал, какую версию этих методов компилировать. Давайте назовем это precompile_MyPackage.jl . Вы можете использовать команды/сценарии, которые вы используете регулярно, а также, возможно, наборы тестов MyPackage .
  3. Скомпилируйте пакет с помощью PackageCompiler
 using PackageCompiler
create_sysimage(:MyPackage, sysimage_path="sys_MyPackage.so", precompile_execution_file="precompile_MyPackage.jl")
 
  1. После этого вы начнете Джулию со следующей команды:
 julia --sysimage sys_MyPackage.so
 

Наконец, пожалуйста, взгляните на отличное обучающее видео https://live.juliacon.org/talk/Z8TE39